万书网 > 文学作品 > Android从入门到精通 > 第160页

第160页



public  void  login()  {



String  target  =  "http://192.168.1.66:8081/login/login.jsp";  //要提交的目标地址



HttpPost  httpRequest  =  new  HttpPost(target);  //创建HttpPost对象



//将要传递的参数保存到List集合中



List  params  =  new  ArrayList();



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页面,用于实现用户登录。