ANDROID_MARS学习笔记_S04_004_用HTTPCLENT发带参数的get和post请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ANDROID_MARS学习笔记_S04_004_用HTTPCLENT发带参数的get和post请求相关的知识,希望对你有一定的参考价值。

一、代码

1.xml
(1)activity_main.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context="com.http2.MainActivity" >
10 
11     <EditText
12         android:id="@+id/nameText"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:text="小明" 
16         />
17     <EditText
18         android:id="@+id/ageText"
19         android:layout_width="wrap_content"
20         android:layout_height="wrap_content"
21         android:text="123" 
22         />
23     <Button
24         android:id="@+id/getBtnId"
25         android:layout_width="wrap_content"
26         android:layout_height="wrap_content"
27         android:text="Get请求" 
28         android:onClick="getHttp"/>
29     <Button
30         android:id="@+id/postBtnId"
31         android:layout_width="wrap_content"
32         android:layout_height="wrap_content"
33         android:text="Post请求" 
34         android:onClick="postHttp"/>
35 
36 </LinearLayout>

 

(2)AndroidManifest.xml

增加

<uses-permission android:name="android.permission.INTERNET"/>

 

2.java
(1)HandleRequest.java  服务器端Servlet

 1 package 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 HandleRequest extends HttpServlet {
12 
13     public void doGet(HttpServletRequest request, HttpServletResponse response)
14             throws ServletException, IOException {
15         System.out.println("doGet");
16         request.setAttribute("method", "get访求访问");
17         request.setAttribute("name", request.getParameter("name"));
18         request.setAttribute("age", request.getParameter("age"));
19         response.getWriter().print("get访求访问--->"+request.getParameter("name")+"--->"+request.getParameter("age"));
20         //request.getRequestDispatcher("index.jsp").forward(request, response);
21     }
22     
23     public void doPost(HttpServletRequest request, HttpServletResponse response)
24             throws ServletException, IOException {
25         System.out.println("doPost");
26         request.setAttribute("method", "post访求访问");
27         request.setAttribute("name", request.getParameter("name"));
28         request.setAttribute("age", request.getParameter("age"));
29         response.getWriter().print("post访求访问--->"+request.getParameter("name")+"--->"+request.getParameter("age"));
30         //request.getRequestDispatcher("index.jsp").forward(request, response);
31     }
32 
33 }

 

(2)MainActivity.java 

 1 package com.http2;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import android.app.Activity;
 7 import android.os.Bundle;
 8 import android.view.View;
 9 import android.widget.EditText;
10 
11 public class MainActivity extends Activity {
12 
13     //private Button getBtn,postBtn = null;
14     private EditText nameView,ageView = null;
15     private String baseUrl = "http://192.168.1.104:8080/AndroidServerTest/HandleRequest";
16     private String name,age = null;
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21         
22         nameView = (EditText) findViewById(R.id.nameText);
23         ageView = (EditText) findViewById(R.id.ageText);
24         name = nameView.getText().toString();
25         age = ageView.getText().toString();
26     }
27     
28     public void getHttp(View view) {
29         String url = baseUrl + "?name=" + name + "&age=" + age;
30         HttpAsyncTask httpAsyncTask = new HttpAsyncTask(url, "get");
31         httpAsyncTask.execute("");
32     }
33     public void postHttp(View view) {
34         //post的参数会放在httpEntity里,所以不用拼url
35         List<String> parmas = new ArrayList<String>();
36         parmas.add(name);
37         parmas.add(age);
38         HttpAsyncTask httpAsyncTask = new HttpAsyncTask(baseUrl, "post", parmas);
39         httpAsyncTask.execute("");
40     }
41     
42 }

 

(3)HttpAsyncTask.java

  1 package com.http2;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.IOException;
  5 import java.io.InputStream;
  6 import java.io.InputStreamReader;
  7 import java.io.UnsupportedEncodingException;
  8 import java.util.ArrayList;
  9 import java.util.List;
 10 
 11 import org.apache.http.HttpEntity;
 12 import org.apache.http.HttpResponse;
 13 import org.apache.http.NameValuePair;
 14 import org.apache.http.client.ClientProtocolException;
 15 import org.apache.http.client.HttpClient;
 16 import org.apache.http.client.entity.UrlEncodedFormEntity;
 17 import org.apache.http.client.methods.HttpGet;
 18 import org.apache.http.client.methods.HttpPost;
 19 import org.apache.http.client.methods.HttpRequestBase;
 20 import org.apache.http.impl.client.DefaultHttpClient;
 21 import org.apache.http.message.BasicNameValuePair;
 22 
 23 import android.os.AsyncTask;
 24 
 25 public class HttpAsyncTask extends AsyncTask<String, Void, Void> {
 26 
 27     private String url;
 28     private String method;
 29     private List<String> params;
 30     
 31     public HttpAsyncTask(String url, String method) {
 32         super();
 33         this.url = url;
 34         this.method = method;
 35     }
 36     public HttpAsyncTask(String url, String method, List<String> params) {
 37         super();
 38         this.url = url;
 39         this.method = method;
 40         this.params = params;
 41     }
 42 
 43     @Override
 44     protected Void doInBackground(String... params) {
 45         if("get".equals(method))
 46             sendGetHttpRequest(url);
 47         else if("post".equals(method))
 48             sendPostRequest(url, this.params);
 49         return null;
 50     }
 51     
 52     private void sendPostRequest(String url,List<String> params) {
 53         System.out.println("sendPostRequest---->");
 54         NameValuePair nameValuePair1 = new BasicNameValuePair("name", this.params.get(0));
 55         NameValuePair nameValuePair2 = new BasicNameValuePair("age", this.params.get(1));
 56         List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
 57         nameValuePairs.add(nameValuePair1);
 58         nameValuePairs.add(nameValuePair2);
 59         InputStream inputStream = null;
 60         try {
 61             //请求体
 62             HttpEntity httpEntity = new UrlEncodedFormEntity(nameValuePairs);
 63             //url不用带参数-->"?a=1&b=2"
 64             HttpPost httpPost = new HttpPost(url);
 65             httpPost.setEntity(httpEntity);
 66             HttpClient httpClient = new DefaultHttpClient();
 67             HttpResponse httpResponse = httpClient.execute(httpPost);
 68             HttpEntity respHttpEntity = httpResponse.getEntity();
 69             inputStream = respHttpEntity.getContent();
 70             BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
 71             String line = null;
 72             StringBuilder sb = new StringBuilder();
 73             while ((line = reader.readLine()) != null) {
 74                 sb.append(line);
 75             }
 76             System.out.println(sb);
 77         } catch (Exception e) {
 78             e.printStackTrace();
 79         }
 80     }
 81         
 82     private void sendGetHttpRequest(String url) {
 83         System.out.println("sendGetHttpRequest---->");
 84         //生成一个请求对象
 85         HttpGet httpGet = new HttpGet(url);
 86         //生成一个Http客户端对象
 87         HttpClient httpClient = new DefaultHttpClient();
 88         InputStream inputStream = null;
 89         //使用Http客户端发送请求对象
 90         try {
 91             HttpResponse httpResponse = httpClient.execute(httpGet);
 92             HttpEntity httpEntity = httpResponse.getEntity();
 93             inputStream = httpEntity.getContent();
 94             BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
 95             String line = null;
 96             StringBuilder sb = new StringBuilder();
 97             while ((line = reader.readLine()) != null) {
 98                 sb.append(line);
 99             }
100             System.out.println(sb);
101         } catch (ClientProtocolException e) {
102             e.printStackTrace();
103         } catch (IOException e) {
104             e.printStackTrace();
105         } finally {
106             try {
107                 inputStream.close();
108             } catch (IOException e) {
109                 e.printStackTrace();
110             }
111         }
112     }
113 
114 }

 

以上是关于ANDROID_MARS学习笔记_S04_004_用HTTPCLENT发带参数的get和post请求的主要内容,如果未能解决你的问题,请参考以下文章

ANDROID_MARS学习笔记_S01原始版_004_TableLayout

ANDROID_MARS学习笔记_S03_004_getAllProvidersLOCATIONLISTENERgetBestProvider

ANDROID_MARS学习笔记_S05_004_过滤杂质,得到真正的加速度

ANDROID_MARS学习笔记_S01_004dpidp(dip)及计算

ANDROID_MARS学习笔记_S04_001_OAuth简介

ANDROID_MARS学习笔记_S04_002_用AsyncTask实现异步操作