2011-11-08 52 views
0

我有一个android应用程序,在整个应用程序中调用web服务不同时间。由于调用ksoap2方法会使应用程序不响应,所以我必须将整个事件放入AsyncTask类中。android ksoap2响应问题

我所做的就是在onPreExecute()上创建一个ProgressDialog,并调用doInBackground上的Web服务,就像在我的主程序中完成的一样。但是,虽然对Web服务的调用有效,但来自Web服务的响应是“[email protected]”。 FYI com.SmartInfinity是我的应用程序包,InfinityMain是我的主要活动,webServiceCall是调用Web服务的方法。

有没有人知道为什么会发生这种情况? Web服务应该返回结果为 “[field_x1 = value_x1; field_y1 = value + y1; field_x2 = value_x2; field_y2 = value_y2;]” 当我用AsyncTask之外的相同参数调用相同的函数时,它完美地起作用。

感谢您的帮助。

编辑:这里是我的代码:

private class webServiceCall extends AsyncTask<String, Void, Object> 
{ 
    @Override 
    protected void onPreExecute() 
    { 
     dialog.show(); 
    } 

    protected Object onPostExecute(Object... params) 
    { 
     dialog.dismiss(); 
     return params; 
    } 

    @Override 
    protected Object doInBackground(String... params) 
    { 
     Object result = null; 
     String[] temp = new String[params.length - 2]; 
     String method_name = params[0]; 
     String action_name = params[1]; 
     for (int i = 2; i < params.length; i++) 
     { 
      temp[i-2] = params[i]; 
     } 
     result = callWebService(method_name, action_name, temp, 60); 
     dialog.dismiss(); 
     return result; 
    } 

} 

然后将结果转换为字符串和正常使用。 这里是我叫的AsyncTask和处理我的结果:

Object result = new webServiceCall().execute(UserArgs); 


     String str = result.toString(); 
     String delims = "[=;]+"; 
     String [] stringuser = str.split(delims); 
+0

看起来像是一个toString,如果您想要响应,则使用错误? – Tobias

+0

实际上,我确实将响应作为一个对象并使用.toString(),但这也是我在AsyncTask之外所做的,并且它工作正常。我如何克服这一点? – Athan

+0

然后,必须在空对象上调用toString()(因为它在响应可用之前运行?)对于此问题的相关代码会很好。不应该太难找出:) – Tobias

回答

1

对象result =新webServiceCall()执行(UserArgs)。

这就是你的问题。新的webServiceCall()。execute(UserArgs);不会返回您的asyncTask的结果,它只会返回对您的任务的引用。您的callWebService的结果被发送到onPostExecute()。在这里你可以使用结果。要么从这里调用回调函数,要么直接使用结果(这里是在UI线程中,所以您可以在这里修改UI)。

+0

好的,结果被发送到onPostExecute(),但由Eclipse标记为从未在本地使用,我不明白它... – Athan

+0

如果在上面添加@Overridde,会发生什么?如果它无论如何工作,那么不要介意eclipse,有时eclipse的UI bug和警告不会阻止你编译。对不起,我不能帮助你更多需要整个项目,如果没有警告的理由。 – Tobias