Android开发网络请求之GET和POST

下面分别使用GET和POST方式从网络后台拉取如下的JSON格式的数据,并在客户端进行解析:

{                                              
    "code": "200",                     
    "message": "Get Success",
    "result": [                             
        {                                      
            "name": "Tom",          
            "age": 19,                  
            "sex": "男"                  
        },                                    
        {                                    
            "name": "Kate",         
            "age": 18,                  
            "sex": "女"                  
        },                                    
        {                                    
            "name": "Jim",         
            "age": 23,                  
            "sex": "男"                  
        }                                    
    ]                                         
}   
                                         

[说明]JSON格式的数据中,大括号{ }包裹的则为JsonObject,而中括号[ ]包裹的则为JsonArray。

.为了解析方便,首先创建一个Student的类,如下:

public class Student

{

         private String name;

         private int age;

         private String sex;


         public Student()

         {

         }


         // Getter和Setter方法

}


.GET方式获取并解析JSON数据

public HashMap<String, Object> getStudentsInfos(String account, String password) throws Exception

{

        String webUrl = "http://mxd/study.php?account=" + account + "&password=" + password;

       HttpGet httpGet = new HttpGet(webUrl);

       HttpClient httpClient = new DefaultHttpClient();


       HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 10 * 1000);// 设置请求超时

       HttpConnectionParams.setSoTimeout(httpClient.getParams(), 10 * 1000);// 设置响应超时


       HttpResponse response = httpClient.execute(httpGet);

       if (response.getStatusLine().getStatusCode() == 200)

       { // =200表示拉取数据正常

              return parseStudentsInfos(response);

       } else

       {

              HashMap<String, Object> tempMap = new HashMap<String, Object>();

              tempMap.put("code", "0");

              tempMap.put("message", "网络请求超时,请检查您的网络链接!");

              return tempMap;

       }

}


private HashMap<String, Object> parseStudentsInfos(HttpResponse response) throws Exception

{

       HttpEntity httpEntity = response.getEntity();


       InputStream inputStream = httpEntity.getContent();

       String resultStr = StreamTool.read(inputStream); // 将输入流转化为_字符串

       HashMap<String, Object> infoMap = new HashMap<String, Object>();


       JSONObject jsonObject = new JSONObject(resultStr);

       String code = jsonObject.getString("code");

       infoMap.put("code", code);

       String message = jsonObject.getString("message");

       infoMap.put("message", message);

       if (code.equals("200"))

       {

              List<Student> studentList = new ArrayList<Student>();

              Student student = null;

              JSONObject stuJson = null;

              if (jsonObject.getJSONArray("result") != null)

              {

                     JSONArray result = jsonObject.getJSONArray("result");

                     int videoCount = result.length(); // 此处,避免在for的第二个参数处出现result.length()操作

                     for (int i = 0; i < videoCount; i++)

                     {

                            stuJson = result.getJSONObject(i);

                            student = new Student(); // 实例化

                            student.setName_Studnet(stuJson.getString("name"));

                            student.setAge_Studnet(stuJson.getInt("age"));

                            student.setSex_Studnet(stuJson.getString("sex"));

                            studentList.add(student);

                            student = null;

                            stuJson = null;

                     }

              }

              infoMap.put("studentList", studentList);

       }

       return infoMap;

}


.POST方式获取并解析JSON数据

public HashMap<String, Object> getStudentsInfos(String account, String password) throws Exception

{

        String urlpath = "http://mxd/study.php";

        NameValuePair pair1 = new BasicNameValuePair("account", account); // 传入参数

        NameValuePair pair2 = new BasicNameValuePair("password", password);// 传入参数


        List<NameValuePair> pairList = new ArrayList<NameValuePair>();

        pairList.add(pair1);

        pairList.add(pair2);


        HttpEntity requestHttpEntity = new UrlEncodedFormEntity(pairList, HTTP.UTF_8); // 解决中文乱码的问题

        HttpPost httpPost = new HttpPost(urlpath);// URL使用基本URL即可,其中不需要加参数

        httpPost.addHeader("charset", HTTP.UTF_8); // 设置编码格式

        httpPost.setEntity(requestHttpEntity);// 将请求体内容加入请求中

        HttpClient httpClient = new DefaultHttpClient();// 需要客户端对象来发送请求


        HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 10 * 1000);// 设置请求超时

        HttpConnectionParams.setSoTimeout(httpClient.getParams(), 10 * 1000);// 设置响应超时


        HttpResponse response = httpClient.execute(httpPost);// 发送请求

        if (response.getStatusLine().getStatusCode() == 200)

        {

                return parseStudentsInfos(response);

        } else

        {

                HashMap<String, Object> tempMap = new HashMap<String, Object>();

                tempMap.put("code", "0");

                tempMap.put("message", "网络请求超时,请检查您的网络链接!");

                return tempMap;

        }

}


private HashMap<String, Object> parseStudentsInfos(HttpResponse response) throws Exception

{

        HttpEntity httpEntity = response.getEntity();


        InputStream inputStream = httpEntity.getContent();

        String resultStr = StreamTool.read(inputStream); // 将输入流转化为_字符串

        HashMap<String, Object> infoMap = new HashMap<String, Object>();


        JSONObject jsonObject = new JSONObject(resultStr);

        String code = jsonObject.getString("code");

        infoMap.put("code", code);

        String message = jsonObject.getString("message");

        infoMap.put("message", message);

        if (code.equals("200"))

        {

                List<Student> studentList = new ArrayList<Student>();

                Student student = null;

                JSONObject stuJson = null;

                if (jsonObject.getJSONArray("result") != null)

                {

                        JSONArray result = jsonObject.getJSONArray("result");

                        int videoCount = result.length(); // 此处,避免在for的第二个参数处出现result.length()操作

                        for (int i = 0; i < videoCount; i++)

                        {

                                stuJson = result.getJSONObject(i);

                                student = new Student(); // 实例化

                                student.setName_Studnet(stuJson.getString("name"));

                                student.setAge_Studnet(stuJson.getInt("age"));

                                student.setSex_Studnet(stuJson.getString("sex"));

                                studentList.add(student);

                                student = null;

                                stuJson = null;

                        }

                }

                infoMap.put("studentList", studentList);

        }

        return infoMap;

}


GET和POST方式中都用到了一个StreamTool这个工具类,负责将InputStream转化为String,StreamTool.java工具类如下:

package com.***.utils;


import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;


/**

 * @This class is used to parse info from InputStream!

 */

public class StreamTool

{

        /**

        * @param is

        *            输入流

        * @return 返回将输入流转化为 字符串之后

        * @throws Exception

        */

        public static String read(InputStream is) throws Exception

        {

                BufferedReader reader = new BufferedReader(new InputStreamReader(is));

                String result = "";

                String line = "";

                while (null != (line = reader.readLine()))

                {

                        result += line;

                }

                is.close(); // 关闭输入流

                return result;

        }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,Android 中可以使用 HttpURLConnection 类来进行 HTTP 请求的发送,以下是一个简单的封装示例: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class HttpUtil { public static String sendHttpRequest(String urlStr, String method, String data) { HttpURLConnection connection = null; BufferedReader reader = null; try { URL url = new URL(urlStr); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod(method); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); connection.setDoInput(true); connection.setDoOutput(true); if (method.equals("POST")) { OutputStream outputStream = connection.getOutputStream(); outputStream.write(data.getBytes()); outputStream.flush(); outputStream.close(); } InputStream inputStream = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } return response.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if (connection != null) { connection.disconnect(); } } return null; } } ``` 您可以使用 `sendHttpRequest` 方法来发送 HTTP 请求,需要传入请求的 URL、请求方法(GET 或 POST)以及请求数据(如果是 POST 请求)。方法会返回响应的数据。例如,发送一个 GET 请求: ```java String response = HttpUtil.sendHttpRequest("http://www.example.com/api", "GET", null); ``` 发送一个 POST 请求: ```java String data = "param1=value1&param2=value2"; String response = HttpUtil.sendHttpRequest("http://www.example.com/api", "POST", data); ``` 当然,上面的代码只是一个简单的封装示例,实际应用中需要进行更多的参数校验、错误处理等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值