如何使用单独的线程来执行http请求?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (34)

我有一个应用程序在用户单击某些按钮时执行HTTP请求(特别是调用FogBugz API)。现在,我只是在应用程序启动时创建一个服务,然后调用该服务中的不同方法来完成请求。但是,当我这样做时,UI线程中通常会挂起。我已经看过AsyncTask,但我不确定它会做我想完成的事情。因为我需要立即解析HTTP请求返回的XML,所以我需要一个能够将此数据返回给UI线程的进程。ASyncTask能做到这一点,还是有其他方法?

    public static InputStream makeRequest(String httpRequest)
    {
        In a separate thread, run HTTP Request, get back and process, return inputstream
    }

这个方法被其他几个人调用来执行HttpRequests。一旦输入流返回,其他方法解析特定的信息。

提问于
用户回答回答于

最简单的方法

//Body of your click handler
Thread thread = new Thread(new Runnable(){
  @Override
  public void run(){
    //code to do the HTTP request
  }
});
thread.start();

这将导致run()方法内的代码在新的执行线程中执行。可以查看异步任务

用户回答回答于

使用AsyncTask

private class SyncIncoData extends AsyncTask<String, String, String> {
    ProgressBar pb;
    ProgressBar pbar;

    @Override
    protected String doInBackground(String... urls) {
        for (int i = 0; i <= 100; i++) {
            publishProgress(i);
        }
        return null;
    }

    @Override
    protected void onPreExecute() {

        super.onPreExecute();

        pb = (ProgressBar) findViewById(R.id.progressBarsync4);
        pb.setVisibility(View.VISIBLE);

    }

    @Override
    protected void onPostExecute(String result) {

        pb = (ProgressBar) findViewById(R.id.progressBarsync4);
        pb.setVisibility(View.INVISIBLE);

    }

    @Override
    protected void onProgressUpdate(String... values) {
        pbar = (ProgressBar) findViewById(R.id.progressBarpbar);
        pbar.setProgress(Integer.parseInt(values[0]));
        super.onProgressUpdate(values);
    }
}

在里面写入http请求的程序 doinbackgroud()

扫码关注云+社区