1.服务器端
服务器端和android没有太大关系,对J2EE比较熟悉的话写起来应该很容易,这里就不一一贴出代码。
首先在本地创建一个数据库表,其中包含了一个userinfo表用来存储用户信息。
需要实现的代码如下:
DBUtils:创建数据库连接对象
User实体类:用来存放用户信息
UserDao:用来对处理User相关的数据操作
UserService:调用UserDao来处理事务
UserServlet:处理用户请求,并返回
当客户端访问该servlet时,获得客户端传入的数据,处理数据,并将结果写到response中返回给客户端。
UserServlet中doPost方法如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
UserService us = UserService.getInstance();
String username = request.getParameter("username"); //获得从客户端传入的用户名和密码
String password = request.getParameter("password");
//System.out.println("username:"+username);
//System.out.println("password:"+password);
//response.setContentType("text/html");
PrintWriter out = response.getWriter();
if(us.login(username, password))
{
//用户登录成功!
out.println("success");
}
else //用户登录失败
out.println("failed");
out.flush();
out.close();
}
2.客户端,首先创建一个登录Activity。如图所示:
当用户点击登录按钮后,创建一个http请求,发送到服务器端。获得服务器返回的结果后,再进行判断并执行相关操作。
httpclient相当于一个浏览器,通过它,可以很方便的发出GET,POST请求。
该Activity的具体代码如下:
public class GossipActivity extends Activity {
/** Called when the activity is first created. */
private EditText usernameEdit;
private EditText passwordEdit;
private Button loginButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
usernameEdit = (EditText)findViewById(R.id.usernameEdit);
passwordEdit = (EditText)findViewById(R.id.pwdEdit);
loginButton = (Button)findViewById(R.id.loginButton);
loginButton.setOnClickListener(loginListener);
}
//登陆监听器
OnClickListener loginListener = new OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("Login Button clicked!");
String httpUrl = "http://10.0.2.2:8089/Gossip/LoginServlet";
System.out.println(httpUrl);
HttpPost request = new HttpPost(httpUrl);
HttpClient httpClient = new DefaultHttpClient();
//传递参数
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username",usernameEdit.getText().toString()));
params.add(new BasicNameValuePair("password",passwordEdit.getText().toString()));
HttpResponse response;
try {
HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
request.setEntity(entity);
response = httpClient.execute(request);
//如果返回状态为200,获得返回的结果
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
String str = EntityUtils.toString(response.getEntity());
System.out.println("response:"+str);
if(str.trim().equals("success")){
//用户登录成功
System.out.println("登录成功!");
Intent intent = new Intent(GossipActivity.this,GossiplistActivity.class);
startActivity(intent);
}
else{
//用户登录失败
System.out.println("登录失败!");
}
}else{
System.out.println("连接失败!");
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}};
}
在数据库中添加一行:用户名为123,密码为456。登录后调转到另一Activity并在控制台中打印调试信息,结果如下:
3 在向本机发送HTTP请求时,有一点必须注意,就是在android 虚拟机中,127.0.0.1为android 虚拟机的IP地址,
如果要访问本机,IP地址应该改为10.0.2.2。否则肯定会导致访问不成功!