HttpClient获取并解析JSON数据

jopen 10年前

package com.example.testjsonandget;  import java.io.BufferedReader;  import java.io.InputStreamReader;  import java.util.ArrayList;  import java.util.HashMap;  import java.util.List;  import java.util.Map;  import org.apache.http.HttpEntity;  import org.apache.http.HttpResponse;  import org.apache.http.HttpStatus;  import org.apache.http.NameValuePair;  import org.apache.http.client.HttpClient;  import org.apache.http.client.entity.UrlEncodedFormEntity;  import org.apache.http.client.methods.HttpGet;  import org.apache.http.client.methods.HttpPost;  import org.apache.http.client.params.HttpClientParams;  import org.apache.http.impl.client.DefaultHttpClient;  import org.apache.http.message.BasicNameValuePair;  import org.apache.http.params.BasicHttpParams;  import org.apache.http.params.HttpConnectionParams;  import org.apache.http.params.HttpParams;  import org.json.JSONArray;  import org.json.JSONObject;    import android.app.Activity;  import android.os.Bundle;    public class MainActivity extends Activity {      private final String uriString="your url";      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          //服务器返回的JSON数据          JSONObject jsonObject=this.getJSONObjectByGet();          try {           //从JSON中得到字符串     String apiString=jsonObject.getString("api");     String countString=jsonObject.getString("count");     System.out.println("apiString="+apiString+",countString="+countString);     //从JSON中得到JSONArray,并且遍历     JSONArray jsonArray=jsonObject.getJSONArray("data");     for (int i = 0; i < jsonArray.length(); i++) {      JSONObject everyJsonObject=jsonArray.getJSONObject(i);      String category_id=everyJsonObject.getString("category_id");      String category_name=everyJsonObject.getString("category_name");      String category_rgb=everyJsonObject.getString("category_rgb");      String category_news_count=everyJsonObject.getString("category_news_count");      System.out.println("category_id="+category_id+",category_name="+category_name+      ",category_rgb="+category_rgb+",category_news_count="+category_news_count);         System.out.println("=====================================================");     }    } catch (Exception e) {     e.printStackTrace();    }      }        //得到HttpClient      public HttpClient getHttpClient(){       HttpParams mHttpParams=new BasicHttpParams();       //设置网络链接超时       //即:Set the timeout in milliseconds until a connection is established.       HttpConnectionParams.setConnectionTimeout(mHttpParams, 20*1000);       //设置socket响应超时       //即:in milliseconds which is the timeout for waiting for data.       HttpConnectionParams.setSoTimeout(mHttpParams, 20*1000);       //设置socket缓存大小       HttpConnectionParams.setSocketBufferSize(mHttpParams, 8*1024);       //设置是否可以重定向       HttpClientParams.setRedirecting(mHttpParams, true);              HttpClient httpClient=new DefaultHttpClient(mHttpParams);       return httpClient;      }            //得到JSONObject(Get方式)      public JSONObject getJSONObjectByGet(){       JSONObject resultJsonObject=null;       if ("".equals(uriString)||uriString==null) {     return null;    }    HttpClient httpClient=this.getHttpClient();    StringBuilder urlStringBuilder=new StringBuilder(uriString);    StringBuilder entityStringBuilder=new StringBuilder();    //利用URL生成一个HttpGet请求    HttpGet httpGet=new HttpGet(urlStringBuilder.toString());    BufferedReader bufferedReader=null;    HttpResponse httpResponse=null;    try {     //HttpClient发出一个HttpGet请求     httpResponse=httpClient.execute(httpGet);      } catch (Exception e) {     e.printStackTrace();    }    //得到httpResponse的状态响应码    int statusCode=httpResponse.getStatusLine().getStatusCode();    if (statusCode==HttpStatus.SC_OK) {     //得到httpResponse的实体数据     HttpEntity httpEntity=httpResponse.getEntity();     if (httpEntity!=null) {      try {       bufferedReader=new BufferedReader       (new InputStreamReader(httpEntity.getContent(), "UTF-8"), 8*1024);          String line=null;       while ((line=bufferedReader.readLine())!=null) {        entityStringBuilder.append(line+"/n");       }       //利用从HttpEntity中得到的String生成JsonObject       resultJsonObject=new JSONObject(entityStringBuilder.toString());      } catch (Exception e) {       e.printStackTrace();      }     }    }       return resultJsonObject;      }            //----------------------------------------以下为POST请求      //准备进行POST请求的参数,一般而言将这些参数封装在HashMap中      public JSONObject save(String title, String timelength) throws Exception{       Map<String,String> paramsHashMap = new HashMap<String, String>();       paramsHashMap.put("title", title);       paramsHashMap.put("timelength", timelength);       paramsHashMap.put("method", "save");       String path = "your url";       return getJSONObjectByPost(path, paramsHashMap, "UTF-8");      }      //得到JSONObject(Post方式)      //此方法此处未调用测试   public JSONObject getJSONObjectByPost(String path,Map<String, String> paramsHashMap, String encoding) {    JSONObject resultJsonObject = null;    List<NameValuePair> nameValuePairArrayList = new ArrayList<NameValuePair>();    // 将传过来的参数填充到List<NameValuePair>中    if (paramsHashMap != null && !paramsHashMap.isEmpty()) {     for (Map.Entry<String, String> entry : paramsHashMap.entrySet()) {      nameValuePairArrayList.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));     }    }        UrlEncodedFormEntity entity = null;    try {     // 利用List<NameValuePair>生成Post请求的实体数据     // 此处使用了UrlEncodedFormEntity!!!     entity = new UrlEncodedFormEntity(nameValuePairArrayList, encoding);     HttpPost httpPost = new HttpPost(path);     // 为HttpPost设置实体数据     httpPost.setEntity(entity);     HttpClient httpClient = this.getHttpClient();     // HttpClient发出Post请求     HttpResponse httpResponse = httpClient.execute(httpPost);     if (httpResponse.getStatusLine().getStatusCode() == 200) {      // 得到httpResponse的实体数据      HttpEntity httpEntity = httpResponse.getEntity();      if (httpEntity != null) {       try {        BufferedReader bufferedReader = new BufferedReader(        new InputStreamReader(httpEntity.getContent(),"UTF-8"), 8 * 1024);        StringBuilder entityStringBuilder = new StringBuilder();        String line = null;        while ((line = bufferedReader.readLine()) != null) {         entityStringBuilder.append(line + "/n");        }        // 利用从HttpEntity中得到的String生成JsonObject        resultJsonObject = new JSONObject(entityStringBuilder.toString());       } catch (Exception e) {        e.printStackTrace();       }      }     }    } catch (Exception e) {     e.printStackTrace();    }    return resultJsonObject;   }  }