2

我正在开发一个 Android 应用程序,当它启动时:

1)我向我的服务器发出 HTTP 请求以发送一个小的 JSON 文件。

2)打开 webView 以显示 URL。

当服务器正常运行时,绝对没有问题,一切顺利。

但是,如果由于某种原因服务器关闭,HTTP 请求实际上会挂起,我需要等到大约 30 秒的 HTTP 超时,直到我真正看到带有 URL 加载的 webView。

我读到我不应该在 UI 线程内建立任何网络,我应该为此使用另一个线程。

在 BlackBerry 中,我已经为其开发了应用程序,就这么简单:

new Thread(){
  public void run(){
    HttpConnection hc = 
            (HttpConnection)Connector.open("http://www.stackoverflow.com");
  }
}.start();

我只是开始一个新线程,在里面我提出请求和所有必要的网络。这样,即使我的服务器无法访问,webView 也会立即加载,而不会让用户等待并感觉到应用程序实际上正在挂起。

我怎么能在 Android 中做同样的事情,最简单的方法?

4

3 回答 3

7

为什么不使用与 BlackBerry 相同的方法呢?

new Thread() {
  public void run() {
    new URL("http://www.stackoverflow.com").getContent();
  }
}.start();
于 2013-04-25T11:11:37.980 回答
5

使用 AsyncTask,这是最简单的方法。更多详情:http: //developer.android.com/reference/android/os/AsyncTask.html

于 2013-04-25T11:06:20.193 回答
1

在冰淇淋三明治及以上版本中,您不得在 UI 线程中使用任何 web cal。但是,您可以使用线程,但 android 提出的最佳方法是使用异步任务。一个非常简单的例子如下。

《AsyncTask<参数类型、进度值类型、返回类型>》

   class MyAsyncTask extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
     // Runs on UI thread- Any code you wants 
     // to execute before web service call. Put it here.
     // Eg show progress dialog
    }
    @Override
    protected String doInBackground(String... params) {
      // Runs in background thread
        String result = //your web service request;         

         return result;
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(String resp) {

      // runs in UI thread - You may do what you want with response 
      // Eg Cancel progress dialog - Use result         
    }

}
于 2013-04-25T11:24:22.973 回答