Android客户端向服务器端传值——登录实现(一)

根据实习科目需求,先完成Android客户端的登录功能。

要实现登录必然涉及到客户端与服务器端的交互,即客户端需要将用户输入的账号和密码传给服务器端,服务器端连接数据库对其进行验证。

细化问题,先研究一下客户端向服务器端传值的方法。。

新建一个web工程,建一个Servlet如下:

[java]  view plain copy
  1. public class UserServlet extends HttpServlet {  
  2.     private static final long serialVersionUID = 1L;     
  3.     public UserServlet() {  
  4.         super();  
  5.     }  
  6.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  7.             throws ServletException, IOException {  
  8.         String userName=request.getParameter("userName");  
  9.         String passWord=request.getParameter("passWord");  
  10.         //在服务器端解决中文乱码问题   
  11.         userName=NewString.getNewString(userName);  
  12.         passWord=NewString.getNewString(passWord);  
  13.         System.out.println("账号:"+userName);  
  14.         System.out.println("密码:"+passWord);   
  15.     }     
  16.     protected void doPost(HttpServletRequest request,  
  17.             HttpServletResponse response) throws ServletException, IOException {  
  18.         this.doGet(request, response);  
  19.     }  
  20. }  
[java]  view plain copy
  1. public class UserServlet extends HttpServlet {  
  2.     private static final long serialVersionUID = 1L;     
  3.     public UserServlet() {  
  4.         super();  
  5.     }  
  6.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  7.             throws ServletException, IOException {  
  8.         String userName=request.getParameter("userName");  
  9.         String passWord=request.getParameter("passWord");  
  10.         //在服务器端解决中文乱码问题  
  11.         userName=NewString.getNewString(userName);  
  12.         passWord=NewString.getNewString(passWord);  
  13.         System.out.println("账号:"+userName);  
  14.         System.out.println("密码:"+passWord);   
  15.     }     
  16.     protected void doPost(HttpServletRequest request,  
  17.             HttpServletResponse response) throws ServletException, IOException {  
  18.         this.doGet(request, response);  
  19.     }  
  20. }  

客户端登录界面如下,布局比较简单。

Activity代码:

[java]  view plain copy
  1. public class LoginActivity extends Activity {  
  2.     private EditText userName;  
  3.     private EditText passWord;  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.activity_main);          
  8.         userName=(EditText)this.findViewById(R.id.userName);  
  9.         passWord=(EditText)this.findViewById(R.id.passWord);         
  10.     }  
  11.      /** 
  12.       * 用户登录的方法 
  13.       */  
  14.     public void login(View v)  
  15.     {    
  16.         //取得用户输入的账号和密码   
  17.         String name=userName.getText().toString();  
  18.         String pass=passWord.getText().toString();  
  19.         boolean result=UserService.check(name,pass);  
  20.         if(result)  
  21.         {  
  22.             Toast.makeText(getApplicationContext(),R.string.success,1).show();  
  23.         }else  
  24.         {  
  25.             Toast.makeText(getApplicationContext(),R.string.fail,1).show();  
  26.         }     
  27.     }  
  28. }  
[java]  view plain copy
  1. public class LoginActivity extends Activity {  
  2.     private EditText userName;  
  3.     private EditText passWord;  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.activity_main);          
  8.         userName=(EditText)this.findViewById(R.id.userName);  
  9.         passWord=(EditText)this.findViewById(R.id.passWord);         
  10.     }  
  11.      /** 
  12.       * 用户登录的方法 
  13.       */  
  14.     public void login(View v)  
  15.     {    
  16.         //取得用户输入的账号和密码  
  17.         String name=userName.getText().toString();  
  18.         String pass=passWord.getText().toString();  
  19.         boolean result=UserService.check(name,pass);  
  20.         if(result)  
  21.         {  
  22.             Toast.makeText(getApplicationContext(),R.string.success,1).show();  
  23.         }else  
  24.         {  
  25.             Toast.makeText(getApplicationContext(),R.string.fail,1).show();  
  26.         }     
  27.     }  
  28. }  

具体实现的工具类:

[java]  view plain copy
  1. public class UserService {  
  2.     /** 
  3.      * 验证用户登录是否合法 
  4.      * 返回值:请求是否成功 
  5.      */  
  6.     public static boolean check(String name, String pass) {  
  7.         String path="http://135.32.89.17:8080/lss/UserServlet";  
  8.         //将用户名和密码放入HashMap中   
  9.         Map<String,String> params=new HashMap<String,String>();  
  10.         params.put("userName", name);  
  11.         params.put("passWord", pass);         
  12.         try {  
  13.             return sendGETRequest(path,params,"UTF-8");  
  14.         } catch (MalformedURLException e) {  
  15.             // TODO Auto-generated catch block   
  16.             e.printStackTrace();  
  17.         } catch (IOException e) {  
  18.             // TODO Auto-generated catch block   
  19.             e.printStackTrace();  
  20.         }  
  21.         return false;  
  22.     }  
  23.     private static boolean sendGETRequest(String path,  
  24.         Map<String, String> params,String encode) throws MalformedURLException, IOException {  
  25.         StringBuilder url=new StringBuilder(path);  
  26.         url.append("?");  
  27.         for(Map.Entry<String, String> entry:params.entrySet())  
  28.         {  
  29.             url.append(entry.getKey()).append("=");  
  30.             url.append(URLEncoder.encode(entry.getValue(),encode));  
  31.             url.append("&");  
  32.         }  
  33.         //删掉最后一个&   
  34.         url.deleteCharAt(url.length()-1);  
  35.         HttpURLConnection conn=(HttpURLConnection)new URL(url.toString()).openConnection();  
  36.         conn.setConnectTimeout(5000);  
  37.         conn.setRequestMethod("GET");  
  38.         if(conn.getResponseCode()==200)  
  39.          {  
  40.            return true;  
  41.          }  
  42.            return false;  
  43.          }  
  44. }  
[java]  view plain copy
  1. public class UserService {  
  2.     /** 
  3.      * 验证用户登录是否合法 
  4.      * 返回值:请求是否成功 
  5.      */  
  6.     public static boolean check(String name, String pass) {  
  7.         String path="http://135.32.89.17:8080/lss/UserServlet";  
  8.         //将用户名和密码放入HashMap中  
  9.         Map<String,String> params=new HashMap<String,String>();  
  10.         params.put("userName", name);  
  11.         params.put("passWord", pass);         
  12.         try {  
  13.             return sendGETRequest(path,params,"UTF-8");  
  14.         } catch (MalformedURLException e) {  
  15.             // TODO Auto-generated catch block  
  16.             e.printStackTrace();  
  17.         } catch (IOException e) {  
  18.             // TODO Auto-generated catch block  
  19.             e.printStackTrace();  
  20.         }  
  21.         return false;  
  22.     }  
  23.     private static boolean sendGETRequest(String path,  
  24.         Map<String, String> params,String encode) throws MalformedURLException, IOException {  
  25.         StringBuilder url=new StringBuilder(path);  
  26.         url.append("?");  
  27.         for(Map.Entry<String, String> entry:params.entrySet())  
  28.         {  
  29.             url.append(entry.getKey()).append("=");  
  30.             url.append(URLEncoder.encode(entry.getValue(),encode));  
  31.             url.append("&");  
  32.         }  
  33.         //删掉最后一个&  
  34.         url.deleteCharAt(url.length()-1);  
  35.         HttpURLConnection conn=(HttpURLConnection)new URL(url.toString()).openConnection();  
  36.         conn.setConnectTimeout(5000);  
  37.         conn.setRequestMethod("GET");  
  38.         if(conn.getResponseCode()==200)  
  39.          {  
  40.            return true;  
  41.          }  
  42.            return false;  
  43.          }  
  44. }  

运行结果:

服务器端接收内容:

 

总结:

客户端的工具类将用户输入的账号和密码放入HashMap当中,循环遍历取出HashMap中的键和值,构造出形如

http://www.xxx.xxx?key1=value1&key2=value2的字符串。利用该字符串连接服务器,传送相关值。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第一种方法 使用标准的JAVA接口 1 将用户名密码等用Map泛型封装 再使用StringBuffer 转换成一串字符串 然后新建URL打开openConnection 得到 httpURLConnection 设置最长连接时间和setRequestMethod请求方法 用GET还是POST 提交数据用POST 打开输入和输出流 获取上传信息 字节大小以及长度 设置请求体的类型是文本类型 获得输出流 向服务器输出数据 获得服务器响应的结果和状态码 如果 返回码等于200 得到服务器返回的输入流 将输入流转换成指定编码的字符串并返回 就可以成功提交并得到服务器返回的信息 第二种方法 使用标准Apache接口 02 03 15 19 30 + 06 12 02 03 15 19 30 31 + 06 12 1 将用户名密码等用Map泛型封装 再使用List<NameValuePair> list new ArrayList<NameValuePair> ; 转换成一串字符串 然后新建URL打开openConnection 得到 httpURLConnection 设置最长连接时间和setRequestMethod请求方法 用GET还是POST 提交数据用POST 打开输入和输出流 获取上传信息 字节大小以及长度 设置请求体的类型是文本类型 获得输出流 向服务器输出数据 获得服务器响应的结果和状态码 如果 返回码等于200 得到服务器返回的输入流 将输入流转换成指定编码的字符串并返回 就可以成功提交并得到服务器返回的信息">第一种方法 使用标准的JAVA接口 1 将用户名密码等用Map泛型封装 再使用StringBuffer 转换成一串字符串 然后新建URL打开openConnection 得到 httpURLConnection 设置最长连接时间和setRequestMethod请求方法 用GET还是POST 提交数据用POST [更多]
首先这个代码也是从别人那里下载的 但刚开始不能正确运行 通过自己的调试以后 可以正确运行 想在这里分享出来 帮助更多刚入门的同学 在这里想说一些自己的经验 来帮助大家可以更好的运行代码 主要包括两个文件夹: 一是HttpClient文件夹 是安卓客户端代码 要安装安卓环境才能正确运行 二是HelloSevlet文件夹 是安卓的服务器代码 在这个文件夹里只有Myserver java是通信用的 HelloWorldServlet java是用来测试用的 在这里说明几个在调试和测试过程中的关键点: HttpClient文件夹不多说了 安装了安卓环境都可以正确运行起来 主要说说服务器端 HelloSevlet文件夹 这个文件夹在运行时可以在本地的Apache服务器上部署 也可以在真正的服务器上部署 不管在哪部署 部署以后 通过http: ip:8080 Myserver来访问 如果在本地的IE上能访问 说明可以正确使用 如果在本地的IE都不能访问 说明路径还是有问题 还要再重新配置 当服务器端能够正确的在Apache上部署和运行以后 再通过安卓客户端代码访问 则可以正确通信了 PS: 代码里的服务器地址 要换成本地跑的服务器地址才可以 一般为127 0 0 1 ">首先这个代码也是从别人那里下载的 但刚开始不能正确运行 通过自己的调试以后 可以正确运行 想在这里分享出来 帮助更多刚入门的同学 在这里想说一些自己的经验 来帮助大家可以更好的运行代码 主要包括两个 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值