2011-11-08 15 views
0

私は、アプリケーションを通してさまざまな時間ウェブサービスを呼び出すアンドロイドアプリケーションを持っています。 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;] 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

レスポンスが必要な場合にfaultyに使用されるtoStringのように見えますか? – Tobias

+0

実際、はい、私はオブジェクトとして応答を取るし、.toString()を使用しますが、それは私もAsyncTaskの外でやっていることです。どのように私はそれを克服するのですか? – Athan

+0

これで、空のオブジェクトに対してtoString()を呼び出さなければなりません(応答前の実行が利用可能であるため)。この問題の関連コードでうまくいくでしょう。それを理解することが難しくありません:) – Tobias

答えて

1

オブジェクトの結果=新しいwebServiceCall()(UserArgs)を実行します;。

これは問題です。新しいwebServiceCall()。execute(UserArgs); asyncTaskの結果を返しません。タスクへの参照のみを返します。あなたのcallWebServiceの結果はonPostExecute()に送られます。ここで結果を使用することができます。ここからコールバックを呼び出すか、直接結果を使用することができます(ここでUIスレッドに戻り、ここでUIを変更できます)。

+0

結果はonPostExecute()に送信されますが、これはEclipseでローカルで使用されていないとマークされていますが、私はそれを取得しません... – Athan

+0

@Overriddeを上に追加するとどうなりますか?それはとにかくその後、日食UIのバグや警告がコンパイルからあなたを止めることはありません気にしない場合は、とにかく動作します。申し訳ありませんが、警告の理由が「ない」場合は、プロジェクト全体がさらに必要になることはありません。 – Tobias