【问题标题】:Optimizing HTTP requests in android在android中优化HTTP请求
【发布时间】:2013-08-14 08:27:48
【问题描述】:

我注意到,与与同一服务器通信的应用程序相比,我的 http 请求往往会花费大量时间。这让我的应用感觉迟缓,我想知道是否有更好的方法来发出这些请求并更新 UI。

目前我使用这种方法来发出帖子请求

public String postRequest(List<NameValuePair> nameValuePairs, String method_name) {

    String result = "";
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.mysite.com/api/"+method_name);
    httppost.setHeader("Accept", "application/json");
    httppost.setHeader("Authorization", "Basic somestuff");

    try {
        // Add your data           
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
        BufferedReader rd = new BufferedReader(new InputStreamReader(
                response.getEntity().getContent()));
        result = rd.readLine();

        return result;
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    }
    return null;
}

在我的 UI 线程(即我的 Fragment 类)中,我在这样的异步任务中使用它

class MakeRequest extends AsyncTask<Integer, Integer, String> {

    protected String doInBackground(Integer... counter) {           
        String result = "";
        String method_name = "";

        try {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("id", value));
            nameValuePairs.add(new BasicNameValuePair("name", name));
            method_name = "petition/setPetition";

            result = fixr.postRequest(nameValuePairs, method_name);

            JSONObject jsonFile = new JSONObject(result);
            if(!jsonFile.has("error")){ 

                //Parse JSON using GSON

                return "success";
            }else{
                return jsonFile.getString("error");
            }
        } catch (Exception e) {
            e.printStackTrace();                
        }

        return null;
    }

    protected void onPostExecute(String jsonResult) {

        try {   

            if(jsonResult != null){                 
                //update UI
            }else{
                //Error message
            }               
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我想对此进行优化,以便用户可以在我的应用程序上获得非常流畅的体验。我对使用第三方 http 库持开放态度,或者是否还有反对使用 AysncTasks 的论点,也许是 runOnUiThread()

【问题讨论】:

    标签: java android android-asynctask android-ui androidhttpclient


    【解决方案1】:

    【讨论】:

    • Volley 似乎是要走的路,我正要尝试,但找不到 .jar 文件。由于某种原因我无法在 Eclipse 上安装 GIT 插件,因此无法获得 GIT 克隆
    • 我有一个 jar 版本,但它可能更旧,但我认为您可以使用它来完成您的常见任务。 app.box.com/s/h7a8db233ydx0orlwf0y
    【解决方案2】:

    试试排球队友!我从 AsyncTasks 更改为 Volley 库,我对整体体验感到非常满意!

    Volley Library

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2015-08-02
      • 2021-09-05
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      相关资源
      最近更新 更多