本文所述实例源自一个项目开发中的登录验证功能,具体的要求就是,在Android端输入用户名和密码,在服务器端验证MySQL数据库中是否有此用户,实现之前当然首要的是,如何使Android端的数据发送到服务器端,具体的实现方法如下:
服务器端:ManageServlet.java代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class ManageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding( "utf-8" );
response.setCharacterEncoding( "utf-8" );
String name = request.getParameter( "name" );
String password = request.getParameter( "password" );
System.out.println( "用户名:" +name+ " 密码:" +password);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
|
在这里实现的仅仅是把用户端的数据在控制台打印出来,相信学过jsp开发的大神,剩下的数据验证应该不在话下,在此不再赘述。
接下来就是Android端了:
主activity:MainActivity.java页面代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
public class MainActivity extends Activity {
private EditText textname = null ;
private EditText textpassword = null ;
private Button button = null ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textname = (EditText)findViewById(R.id.name);
textpassword = (EditText)findViewById(R.id.password);
button = (Button)findViewById(R.id.button);
button.setOnClickListener( new mybuttonlistener());
}
class mybuttonlistener implements OnClickListener{
boolean result= false ;
String name;
String password;
public void onClick(View v) {
try {
name = textname.getText().toString();
name = new String(name.getBytes( "ISO8859-1" ), "UTF-8" );
password = textpassword.getText().toString();
password = new String(password.getBytes( "ISO8859-1" ), "UTF-8" );
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
result = NewsService.save(name,password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (result){
Toast.makeText(MainActivity. this , R.string.ok, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity. this , R.string.error, Toast.LENGTH_SHORT).show();
}
}
}
}
|
布局文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
< RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = "${relativePackage}.${activityClass}"
>
< LinearLayout
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:orientation = "vertical"
>
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/name" />
< EditText
android:id = "@+id/name"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:hint = "@string/playname"
android:singleLine = "true"
/>
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/password" />
< EditText
android:id = "@+id/password"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:password = "true"
android:hint = "@string/playpass"
android:singleLine = "true"
/>
< Button
android:id = "@+id/button"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:onClick = ""
android:text = "@string/submit"
/>
</ LinearLayout >
</ RelativeLayout >
|
用于向服务器端发送数据的service(NewsService):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
public class NewsService {
/**
* 登录验证
* @param name 姓名
* @param password 密码
* @return
*/
public static boolean save(String name, String password){
String path = "http://<span style=" color: #ff0000; "><strong>192.168.1.104</strong></span>:8080/Register/ManageServlet" ;
Map<String, String> student = new HashMap<String, String>();
student.put( "name" , name);
student.put( "password" , password);
try {
return SendGETRequest(path, student, "UTF-8" );
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false ;
}
/**
* 发送GET请求
* @param path 请求路径
* @param student 请求参数
* @return 请求是否成功
* @throws Exception
*/
private static boolean SendGETRequest(String path, Map<String, String> student, String ecoding) throws Exception{
// http://127.0.0.1:8080/Register/ManageServlet?name=1233&password=abc
StringBuilder url = new StringBuilder(path);
url.append( "?" );
for (Map.Entry<String, String> map : student.entrySet()){
url.append(map.getKey()).append( "=" );
url.append(URLEncoder.encode(map.getValue(), ecoding));
url.append( "&" );
}
url.deleteCharAt(url.length()- 1 );
System.out.println(url);
HttpsURLConnection conn = (HttpsURLConnection) new URL(url.toString()).openConnection();
conn.setConnectTimeout( 100000 );
conn.setRequestMethod( "GET" );
if (conn.getResponseCode() == 200 ){
return true ;
}
return false ;
}
}
|
因为需要连接网络,一定要在AndroidManifest.xml进行网络权限配置:
1
|
< uses-permission android:name = "android.permission.INTERNET" />
|
至此基本已经完成Android向服务器端发送数据,希望本文实例对大家的Android程序设计有所帮助。