反应灵敏的HttpClient

时间:2012-10-25 08:02:01

标签: android httpclient

我正在尝试使用下面的代码从服务器下载json文件。但是,我的应用程序表现得很奇怪。有时,json会在1-2秒内下载,有时它会永远停留在此功能上。我也尝试过像HttpUrlConnection这样的下载方式。但是,这也无济于事。任何人都可以建议我修复它!

public String getJSONString(String url) {
        String json = null;
        HttpClient httpclient = null;
        try {
            Log.d("MARKER","PARSING SE PEHLE");
            HttpParams params = new BasicHttpParams();
            Log.d("MARKER","1st line");
            HttpClient httpclient = new DefaultHttpClient(params);              HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpclient.execute(httpPost);

            HttpEntity httpEntity = httpResponse.getEntity();    
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 80000);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) 
            {sb.append(line + "\n");}
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
        Log.d("MARKER","DOWNLOAD COMPLETE");
        HttpClientProvider.safeClose(httpclient);
        return json;

    }

1 个答案:

答案 0 :(得分:0)

试试这个:

public class JSONParser {

   static InputStream is = null;
   static JSONObject jObj = null;
   static String json = "";

   // constructor
   public JSONParser() {

   }

   // function get json from url
   // by making HTTP POST or GET method
   public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {

      // Making HTTP request
      try {

         // check for request method
         if (method == "POST") {
            // request method is POST
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

         } else if (method == "GET") {
            // request method is GET
            DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "?" + paramString;
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
         }

      } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
      } catch (ClientProtocolException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }

      if (is == null)
         return new JSONObject();

      try {
         BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
         StringBuilder sb = new StringBuilder();
         String line = null;
         while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
         }
         is.close();
         json = sb.toString();
      } catch (Exception e) {
         Log.e("Buffer Error", "Error converting result " + e.toString());
      }

      // try parse the string to a JSON object
      try {
         jObj = new JSONObject(json);
      } catch (JSONException e) {
         Log.e("JSON Parser", "Error parsing data " + e.toString());
      }

      // return JSON String
      return jObj;

   }
}

您可以在AsyncTask中填充相关对象以避免出现其他问题。玩得开心

String SERVER_URL ="";


List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jsonParser.makeHttpRequest(SERVER_URL, "GET", params);