【问题标题】:Irresponsive HttpClient无响应的 HttpClient
【发布时间】:2013-11-12 07:39:40
【问题描述】:

我正在尝试使用以下代码从服务器下载 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;

    }

【问题讨论】:

    标签: android httpclient


    【解决方案1】:

    试试这个:

    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);
    

    【讨论】:

    • 这个'params'参数是什么?
    • 看看我新添加的帖子
    • 请尽量说得更明确一些,以便我可以帮助您。
    • 它有时会正确运行,有时会挂在 HTTPResponse 行!
    • 我想你的服务器有问题。请试试这个并告诉我发生了什么api.androidhive.info/mail/profile.json
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多