在新线程中创建Web服务请求

时间:2012-04-06 09:57:03

标签: java android ios5 android-ksoap2

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

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

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

                String answer = WebServiceRequests.About();

                     try{

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

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

请将您的解决方案发布到此处。如果您使用Handler或AsyncTask甚至可以使用我的示例。

感谢。

2 个答案:

答案 0 :(得分:0)

对于异步任务,Android具有类AsyncTask。

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

有关详细信息,请参阅android.os.AsyncTask

答案 1 :(得分:0)

AsnycTask始终是第一个推荐,如果您之前没有这样做,请阅读此official dev guide,示例代码:

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();
一旦后台线程(AKA.doInBackground)完成,保证在将来的某个时刻在UI线程上调用

onPostExecute方法。底层框架为我们处理所有肮脏的工作。

希望这有帮助。