public void login() {
String target = "http://192.168.1.66:8081/login/login.jsp"; //要提交的目标地址
HttpPost httpRequest = new HttpPost(target); //创建HttpPost对象
//将要传递的参数保存到List集合中
List
params.add(new BasicNameValuePair("username", username)); //用户名
params.add(new BasicNameValuePair("pwd", pwd)); //密码
try {
httpRequest.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //设置编码方式
HttpResponse httpResponse = MainActivity.httpclient
.execute(httpRequest); //执行HttpClient请求
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { //如果请求成功
result += EntityUtils.toString(httpResponse.getEntity()); //获取返回的字符串
} else {
result = "请求失败!";
}
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace(); //输出异常信息
} catch (ClientProtocolException e) {
e.printStackTrace(); //输出异常信息
} catch (IOException e) {
e.printStackTrace(); //输出异常信息
}
}
(9)在LoginActivity的onCreate()方法中,首先设置布局文件,然后获取“登录”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,创建并开启一个新线程,用于实现用户登录,最后创建一个Handler对象,并且在重写的handleMessage()方法中获取Intent对象,将result的值作为数据包保存到该Intent对象中,同时返回调用该Activity的MainActivity中。具体代码如下:
setContentView(R.layout.login); //设置布局文件
Button login = (Button) findViewById(R.id.button1); //获取“登录”按钮
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
username = ((EditText) findViewById(R.id.editText1)).getText().toString(); //获取输入的用户名
pwd = ((EditText) findViewById(R.id.editText2)).getText().toString(); //获取输入的密码
//创建一个新线程,实现用户登录
new Thread(new Runnable() {
public void run() {
login(); //用户登录
Message m = handler.obtainMessage(); //获取一个Message
handler.sendMessage(m); //发送消息
}
}).start(); //开启线程
}
});
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (result != null) {
Intent intent = getIntent(); //获取Intent对象
Bundle bundle = new Bundle(); //实例化传递的数据包
bundle.putString("result", result);
intent.putExtras(bundle); //将数据包保存到intent中
setResult(0x11, intent); //设置返回的结果码,并返回调用该Activity的Main Activity
finish(); //关闭当前Activity
}
super.handleMessage(msg);
}
};
说明: LoginActivity中使用的布局文件的代码与第3章中的例3.6基本相同,这里不再介绍。
(10)获取布局管理器中添加的“退出”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,使用finish()方法关闭当前的Activity。具体代码如下:
Button exit = (Button) findViewById(R.id.button2); //获取“退出”按钮
exit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish(); //关闭当前Activity
}
});
(11)由于在本实例中需要访问网络资源,所以还需要在AndroidManifest.xml文件中指定允许访问网络资源的权限,具体代码如下:
(12)在AndroidManifest.xml文件中配置LoginActivity,配置的主要属性有Activity使用的实现类、标签和主题样式(这里为对话框),具体代码如下:
android:label="@string/app_name"
android:theme="@android:style/Theme.Dialog"
>
另外,还需要编写一个服务器端的Java Web实例。这里需要编写两个页面:一个是index.jsp页面,用于根据Session变量的值来确认当前用户是否有访问页面的权限;另一个是login.jsp页面,用于实现用户登录。