Android与web后台进行数据交互

本文详细介绍了Android应用通过GET和POST方法与Web后台进行数据交互的过程,并展示了如何使用第三方库AsyncHttpClient简化网络请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无论是用哪种方式使Android与web后台进行数据交互,都需要在eclipes中写一个完整的操作流程,在这里,我是写了一个登录。(没有从数据库进行判断,而是直接把用户名和密码定死了),下面就是我的后台web端。你可以根据你的不同需求在jsp界面用你所需要的提交方式来写

login,jsp:


[html]  view plain  copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.     <!-- <form action="login.do" method="get">  
  11.         用户名:<input type="text" name="uname"/><br>  
  12.         密码:<input type="password" name="upass"/><br>  
  13.         <input type="submit" value="登录"/>  
  14.     </form> -->  
  15.       
  16.         <form action="login.do" method="post">  
  17.         用户名:<input type="text" name="uname"/><br>  
  18.         密码:<input type="password" name="upass"/><br>  
  19.         <input type="submit" value="登录"/>  
  20.     </form>  
  21. </body>  
  22. </html> 

LoginServlet:
[java]  view plain  copy
  1. package com.lxj.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class Login extends HttpServlet{  
  12. //  @Override  
  13. //  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
  14. //      String uname=req.getParameter("uname");  
  15. //      String upass=req.getParameter("upass");  
  16. //        
  17. //      String a=null;  
  18. //      if("admin".equals(uname) && "123".equals(upass)){  
  19. //          a="succes";  
  20. //          System.out.println(a);  
  21. //      }else{  
  22. //          a="fail";  
  23. //          System.out.println(a);  
  24. //      }  
  25. //      PrintWriter pw=resp.getWriter();  
  26. //      pw.write(a);  
  27. //      pw.close();  
  28. //  }  
  29.   
  30.     @Override  
  31.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
  32.         String uname=req.getParameter("uname");  
  33.         String upass=req.getParameter("upass");  
  34.           
  35.         String a=null;  
  36.         if("admin".equals(uname) && "123".equals(upass)){  
  37.             a="succes";  
  38.             System.out.println(a);  
  39.         }else{  
  40.             a="fail";  
  41.             System.out.println(a);  
  42.         }  
  43.         PrintWriter pw=resp.getWriter();  
  44.         pw.write(a);  
  45.         pw.close();  
  46.     }  


最后,还要记得在web.xml里面配置跳转路径
  1. <servlet>  
  2.       <servlet-name>login</servlet-name>  
  3.       <servlet-class>com.lxj.servlet.Login</servlet-class>  
  4.   </servlet>  
  5.     
  6.   <servlet-mapping>  
  7.       <servlet-name>login</servlet-name>  
  8.       <url-pattern>/login.do</url-pattern>  
  9.   </servlet-mapping>

第一:GET提交方式:

    activity_main.xml:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     xmlns:app="http://schemas.android.com/apk/res-auto"  
  5.     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"  
  7.     android:orientation="vertical"  
  8.     tools:context="com.example.android_getandpost.MainActivity">  
  9.   
  10.     <EditText  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="wrap_content"  
  13.         android:hint="请输入用户名"  
  14.         android:id="@+id/uname"  
  15.         />  
  16.   
  17.     <EditText  
  18.         android:layout_width="match_parent"  
  19.         android:layout_height="wrap_content"  
  20.         android:hint="请输入密码"  
  21.         android:id="@+id/upass"  
  22.         />  
  23.   
  24.     <Button  
  25.         android:layout_width="match_parent"  
  26.         android:layout_height="wrap_content"  
  27.         android:text="登陆(Get)"  
  28.         android:onClick="LoginGet"  
  29.         />  
  30.   
  31. </LinearLayout>  


MainActivity:

[java]  view plain  copy
  1. package com.example.android_getandpost;  
  2.   
  3. import android.os.AsyncTask;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.os.Bundle;  
  6. import android.util.Log;  
  7. import android.view.View;  
  8. import android.widget.EditText;  
  9. import android.widget.Toast;  
  10.   
  11. import java.io.BufferedReader;  
  12. import java.io.IOException;  
  13. import java.io.InputStream;  
  14. import java.io.InputStreamReader;  
  15. import java.net.HttpURLConnection;  
  16. import java.net.MalformedURLException;  
  17. import java.net.URL;  
  18.   
  19. public class MainActivity extends AppCompatActivity {  
  20.   
  21.     private EditText uname;  
  22.     private EditText upass;  
  23.   
  24.     @Override  
  25.     protected void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.activity_main);  
  28.         //获取用户名的id  
  29.         uname = (EditText) findViewById(R.id.uname);  
  30.         //获取密码的id  
  31.         upass = (EditText) findViewById(R.id.upass);  
  32.     }  
  33.   
  34.     public void LoginGet(View view){  
  35.         //获取用户名的值  
  36.         String name=uname.getText().toString();  
  37.         //获取密码的值  
  38.         String pass=upass.getText().toString();  
  39.         //获取网络上的servlet路径  
  40.         String path="http://193.168.3.16:8080/Login/login.do";  
  41.         //调用getTask,把获取到的用户名,密码与路径放入方法中  
  42.         new getTask().execute(name,pass,path);  
  43.     }  
  44.   
  45.     class getTask extends AsyncTask {  
  46.   
  47.         @Override  
  48.         protected Object doInBackground(Object[] params) {  
  49.             //依次获取用户名,密码与路径  
  50.             String name = params[0].toString();  
  51.             String pass = params[1].toString();  
  52.             String path = params[2].toString();  
  53.   
  54.             try {  
  55.                 //获取网络上get方式提交的整个路径  
  56.                 URL url = new URL(path + "?uname=" + name + "&upass=" + pass);  
  57.                 //打开网络连接  
  58.                 HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  59.                 //设置提交方式  
  60.                 conn.setRequestMethod("GET");  
  61.                 //设置网络超时时间  
  62.                 conn.setConnectTimeout(5000);  
  63.                 //获取结果码  
  64.                 int code = conn.getResponseCode();  
  65.                 if (code == 200) {  
  66.                     //用io流与web后台进行数据交互  
  67.                     InputStream is = conn.getInputStream();  
  68.                     //字节流转字符流  
  69.                     BufferedReader br = new BufferedReader(new InputStreamReader(is));  
  70.                     //读出每一行的数据  
  71.                     String s = br.readLine();  
  72.                     //返回读出的每一行的数据  
  73.                     return s;  
  74.                 }  
  75.             } catch (MalformedURLException e) {  
  76.                 e.printStackTrace();  
  77.             } catch (IOException e) {  
  78.                 e.printStackTrace();  
  79.             }  
  80.             return null;  
  81.         }  
  82.         @Override  
  83.         protected void onPostExecute(Object o) {  
  84.             super.onPostExecute(o);  
  85.             //获取Android studio与web后台数据交互获得的值  
  86.             String s= (String) o;  
  87.             //吐司Android studio与web后台数据交互获得的值  
  88.             Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();  
  89.         }  
  90.     }  
  91.   
  92. }  

第二:POST提交方式:

activity_main2.xml:

[html]  view plain  copy
  1. package com.example.android_getandpost;  
  2.   
  3. import android.os.AsyncTask;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.os.Bundle;  
  6. import android.util.Log;  
  7. import android.view.View;  
  8. import android.widget.EditText;  
  9. import android.widget.Toast;  
  10.   
  11. import java.io.BufferedReader;  
  12. import java.io.IOException;  
  13. import java.io.InputStream;  
  14. import java.io.InputStreamReader;  
  15. import java.net.HttpURLConnection;  
  16. import java.net.MalformedURLException;  
  17. import java.net.URL;  
  18.   
  19. public class MainActivity extends AppCompatActivity {  
  20.   
  21.     private EditText uname;  
  22.     private EditText upass;  
  23.   
  24.     @Override  
  25.     protected void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.activity_main);  
  28.         //获取用户名的id  
  29.         uname = (EditText) findViewById(R.id.uname);  
  30.         //获取密码的id  
  31.         upass = (EditText) findViewById(R.id.upass);  
  32.     }  
  33.   
  34.     public void LoginGet(View view){  
  35.         //获取用户名的值  
  36.         String name=uname.getText().toString();  
  37.         //获取密码的值  
  38.         String pass=upass.getText().toString();  
  39.         //获取网络上的servlet路径  
  40.         String path="http://193.168.3.16:8080/Login/login.do";  
  41.         //调用getTask,把获取到的用户名,密码与路径放入方法中  
  42.         new getTask().execute(name,pass,path);  
  43.     }  
  44.   
  45.     class getTask extends AsyncTask {  
  46.   
  47.         @Override  
  48.         protected Object doInBackground(Object[] params) {  
  49.             //依次获取用户名,密码与路径  
  50.             String name = params[0].toString();  
  51.             String pass = params[1].toString();  
  52.             String path = params[2].toString();  
  53.   
  54.             try {  
  55.                 //获取网络上get方式提交的整个路径  
  56.                 URL url = new URL(path + "?uname=" + name + "&upass=" + pass);  
  57.                 //打开网络连接  
  58.                 HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  59.                 //设置提交方式  
  60.                 conn.setRequestMethod("GET");  
  61.                 //设置网络超时时间  
  62.                 conn.setConnectTimeout(5000);  
  63.                 //获取结果码  
  64.                 int code = conn.getResponseCode();  
  65.                 if (code == 200) {  
  66.                     //用io流与web后台进行数据交互  
  67.                     InputStream is = conn.getInputStream();  
  68.                     //字节流转字符流  
  69.                     BufferedReader br = new BufferedReader(new InputStreamReader(is));  
  70.                     //读出每一行的数据  
  71.                     String s = br.readLine();  
  72.                     //返回读出的每一行的数据  
  73.                     return s;  
  74.                 }  
  75.             } catch (MalformedURLException e) {  
  76.                 e.printStackTrace();  
  77.             } catch (IOException e) {  
  78.                 e.printStackTrace();  
  79.             }  
  80.             return null;  
  81.         }  
  82.         @Override  
  83.         protected void onPostExecute(Object o) {  
  84.             super.onPostExecute(o);  
  85.             //获取Android studio与web后台数据交互获得的值  
  86.             String s= (String) o;  
  87.             //吐司Android studio与web后台数据交互获得的值  
  88.             Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();  
  89.         }  
  90.     }  
  91.   
  92. }  

Main2Activity:

[java]  view plain  copy
  1. package com.example.android_getandpost;  
  2.   
  3. import android.os.AsyncTask;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.widget.EditText;  
  8. import android.widget.Toast;  
  9.   
  10. import java.io.BufferedReader;  
  11. import java.io.IOException;  
  12. import java.io.InputStream;  
  13. import java.io.InputStreamReader;  
  14. import java.io.OutputStream;  
  15. import java.net.HttpURLConnection;  
  16. import java.net.MalformedURLException;  
  17. import java.net.URL;  
  18.   
  19. public class Main2Activity extends AppCompatActivity {  
  20.   
  21.     private EditText upass;  
  22.     private EditText uname;  
  23.   
  24.     @Override  
  25.     protected void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.activity_main2);  
  28.         //获取用户名的id  
  29.         uname = (EditText) findViewById(R.id.uname);  
  30.         //获取密码的id  
  31.         upass = (EditText) findViewById(R.id.upass);  
  32.     }  
  33.   
  34.     public void LoginPost(View view){  
  35.         //获取用户名的值  
  36.         String name=uname.getText().toString();  
  37.         //获取密码的值  
  38.         String pass=upass.getText().toString();  
  39.         //获取网络上的servlet路径  
  40.         String path="http://193.168.3.16:8080/Login/login.do";  
  41.         //调用postTask,把获取到的用户名,密码与路径放入方法中  
  42.         new postTask().execute(name,pass,path);  
  43.     }  
  44.   
  45.     class postTask extends AsyncTask{  
  46.   
  47.         @Override  
  48.         protected Object doInBackground(Object[] params) {  
  49.             //依次获取用户名,密码与路径  
  50.             String name=params[0].toString();  
  51.             String pass=params[1].toString();  
  52.             String path=params[2].toString();  
  53.             try {  
  54.                 //获取网络上get方式提交的整个路径  
  55.                 URL url=new URL(path);  
  56.                 //打开网络连接  
  57.                HttpURLConnection conn= (HttpURLConnection) url.openConnection();  
  58.                 //设置提交方式  
  59.                 conn.setRequestMethod("POST");  
  60.                 //设置网络超时时间  
  61.                 conn.setConnectTimeout(5000);  
  62.                 //界面上所有的参数名加上他的值  
  63.                 String s="uname="+name+"&upass"+pass;  
  64.                 //获取请求头  
  65.                 conn.setRequestProperty("Content-Length",s.length()+"");//键是固定的  
  66.                 conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");//键和值是固定的  
  67.                 //设置允许对外输出数据  
  68.                 conn.setDoOutput(true);  
  69.                 //把界面上的所有数据写出去  
  70.                 OutputStream os=conn.getOutputStream();  
  71.                 os.write(s.getBytes());  
  72.                 if(conn.getResponseCode()==200){  
  73.                     //用io流与web后台进行数据交互  
  74.                     InputStream is=conn.getInputStream();  
  75.                     //字节流转字符流  
  76.                     BufferedReader br=new BufferedReader(new InputStreamReader(is));  
  77.                     //读出每一行的数据  
  78.                     String str=br.readLine();  
  79.                     //返回读出的每一行的数据  
  80.                     return str;  
  81.                 }  
  82.             } catch (MalformedURLException e) {  
  83.                 e.printStackTrace();  
  84.             } catch (IOException e) {  
  85.                 e.printStackTrace();  
  86.             }  
  87.             return null;  
  88.         }  
  89.   
  90.         @Override  
  91.         protected void onPostExecute(Object o) {  
  92.             super.onPostExecute(o);  
  93.             //获取Android studio与web后台数据交互获得的值  
  94.             String s= (String) o;  
  95.             //吐司Android studio与web后台数据交互获得的值  
  96.             Toast.makeText(Main2Activity.this, s, Toast.LENGTH_SHORT).show();  
  97.         }  
  98.     }  
  99. }  

第三:运用第三方(android-async-http-1.4.4.jar):

首先,在项目中把jar包导入libs,然后右击选择add as library解压,再在build.gradle中的

compileSdkVersion 25
buildToolsVersion "25.0.2"上面加上这样一句代码:useLibrary 'org.apache.http.legacy',然后编译
以解决HttpClient导致不可以问题

activity_mian3.xml:
[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"  
  4.     xmlns:tools="http://schemas.android.com/tools"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"  
  7.     android:orientation="vertical"  
  8.     tools:context="com.example.android_getandpost.Main3Activity">  
  9.   
  10.   
  11.   
  12.     <EditText  
  13.         android:layout_width="match_parent"  
  14.         android:layout_height="wrap_content"  
  15.         android:hint="请输入用户名"  
  16.         android:id="@+id/uname"  
  17.         />  
  18.   
  19.     <EditText  
  20.         android:layout_width="match_parent"  
  21.         android:layout_height="wrap_content"  
  22.         android:hint="请输入密码"  
  23.         android:id="@+id/upass"  
  24.         />  
  25.   
  26.     <Button  
  27.         android:layout_width="match_parent"  
  28.         android:layout_height="wrap_content"  
  29.         android:text="登陆(AsyncHttpClient)"  
  30.         android:onClick="LoginAsyncHttpClient"  
  31.         />  
  32.   
  33. </LinearLayout>  
[html]  view plain  copy
  1. Main3Activity:  
[html]  view plain  copy
  1. <pre code_snippet_id="2504298" snippet_file_name="blog_20170728_10_9188218" class="java" name="code">package com.example.android_getandpost;  
  2.   
  3. import android.support.v7.app.AppCompatActivity;  
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.widget.EditText;  
  7. import android.widget.Toast;  
  8.   
  9. import com.loopj.android.http.AsyncHttpClient;  
  10. import com.loopj.android.http.RequestHandle;  
  11. import com.loopj.android.http.RequestParams;  
  12. import com.loopj.android.http.TextHttpResponseHandler;  
  13.   
  14. import org.apache.http.Header;  
  15.   
  16. public class Main3Activity extends AppCompatActivity {  
  17.   
  18.     private EditText upass;  
  19.     private EditText uname;  
  20.   
  21.     @Override  
  22.     protected void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.activity_main3);  
  25.         //获取用户名的id  
  26.         uname = (EditText) findViewById(R.id.uname);  
  27.         //获取密码的id  
  28.         upass = (EditText) findViewById(R.id.upass);  
  29.     }  
  30.   
  31.     public void LoginAsyncHttpClient(View view){  
  32.         //获取用户名的值  
  33.         String name=uname.getText().toString();  
  34.         //获取密码的值  
  35.         String pass=upass.getText().toString();  
  36.         //获取网络上的servlet路径  
  37.         String path="http://193.168.3.16:8080/Login/login.do";  
  38.         //使用第三方  
  39.         AsyncHttpClient ahc=new AsyncHttpClient();  
  40.         //请求参数  
  41.         RequestParams params=new RequestParams();  
  42.         //给请求参数设键和值(键的名字和web后台保持一致)  
  43.         params.put("name",name);  
  44.         params.put("pass",pass);  
  45.         //设值提交方式  
  46.         ahc.post(this,path,params,new TextHttpResponseHandler(){  
  47.             @Override  
  48.             public void onFailure(int statusCode, Header[] headers, String responseBody, Throwable error) {  
  49.                 super.onFailure(statusCode, headers, responseBody, error);  
  50.             }  
  51.   
  52.             @Override  
  53.             public void onSuccess(int statusCode, Header[] headers, String responseBody) {  
  54.                 super.onSuccess(statusCode, headers, responseBody);  
  55.                 //吐司Android studio与web后台数据交互获得的值  
  56.                 Toast.makeText(Main3Activity.this, responseBody, Toast.LENGTH_SHORT).show();  
  57.             }  
  58.         });  
  59. //            @Override  
  60. //            public void onSuccess(int statusCode, Header[] headers, String responseBody) {  
  61. //                super.onSuccess(statusCode, headers, responseBody);  
  62. //                Toast.makeText(MainActivity.this, responseBody, Toast.LENGTH_SHORT).show();  
  63. //            }  
  64. //        });  
  65.     }  
  66. }  
  67. </pre><br>  
  68. <pre></pre>  
  69. <pre code_snippet_id="2504298" snippet_file_name="blog_20170728_12_7204133" class="html" style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:13.5pt;" name="code"></pre><pre code_snippet_id="2504298" snippet_file_name="blog_20170728_12_7204133" class="html" style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:13.5pt;" name="code"></pre><pre code_snippet_id="2504298" snippet_file_name="blog_20170728_13_9854092" class="html" style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:13.5pt;" name="code">我在运行的时候总是吐司不出东西,原因是因为我没有连局网  
  70. </pre>  
  71. <p></p>  
  72. <div><br>  
  73. </div>  
  74. <div><strong><span style="font-family:宋体; color:rgb(0,128,0); background-color:rgb(255,255,255)"><br>  
  75. </span></strong></div>  
  76. <span style="color:#008000"><strong></strong></span>  
  77. <div><br>  
  78. </div>  
  79. <pre style="background-color:#ffffff; color:#000000; font-family:'宋体'; font-size:13.5pt"></pre>  
  80. <p><br>  
  81. </p>  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值