1

我正在使用 ksoap2-Android 来制作和解析我的请求。如果我想使用它,我必须异步进行。所以我选择为此创建一个新线程。

它看起来像那样,我没有发布我所有的逻辑请求和解析,因为在这种情况下它并不重要。

  new Thread(new Runnable() {
            public void run() {

                String answer = WebServiceRequests.About();

                     try{

                     }catch (Exception e) {
                        // TODO: handle exception
                         e.printStackTrace();
                    }
            }
          }).start();

所以我在回答字符串中收到请求,但现在如何更新我的 GUI?当我尝试时,我得到了我无法在该线程中更新的异常。

请发布您对此的解决方案。如果您使用 Handler 或 AsyncTask 甚至 make 来使用我的示例。

谢谢。

4

2 回答 2

0

对于异步任务,Android 提供了一个 AsyncTask 类。

在此类中,您可以覆盖两个方法。第一种方法适用于应该在后台(不同线程)的代码。在第一个方法完成后,在 UI 线程上调用第二个方法。

详情参考android.os.AsyncTask

于 2012-04-06T10:19:42.447 回答
0

AsnycTask 始终是第一个建议,如果您以前没有这样做过,请阅读此官方开发指南,示例代码:

private class MyAsyncTask extends AsyncTask<Void, Void, String> {
 protected String doInBackground(Void... params) {
   String answer = WebServiceRequests.About();
   return answer;
 }

 protected void onPostExecute(String answer) {
   // Update UI.
   showDialog("Answer " + answer);
 }

}

要启动您的 AsyncTask:

new MyAsyncTask().execute();

onPostExecute 方法保证在将来某个时间点在 UI 线程上被调用,只要后台线程(AKA.doInBackground)完成。底层框架为我们处理所有脏活。

希望这可以帮助。

于 2012-04-06T10:21:14.677 回答