2017-07-13 10 views
0

私は多くの被験者を見つけましたが、解決策を得ることができません。asyncTaskのdoInBackgroundメソッドでsoap要求を行っています。処理が完了したかどうかを知るためにIntegerを取得します。私は私のasyncTask呼び出す:asynctaskから値を取得

  Simulation.AsyncSoapCall task = new Simulation.AsyncSoapCall(); 
      try { 
       Integer taskResult = task.execute().get(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

マイAsyncTaskクラス:

private class AsyncSoapCall extends AsyncTask<Void, Void, Integer> { 


    Integer result; 
    Boolean isInternetPresent = false; 
    Boolean isUrlAvailable = false; 
    ConnectionDetector cd; 

    AsyncSoapCall(){ 
    } 

    @Override 
    protected Integer doInBackground(Void... params) { 

     cd = new ConnectionDetector(getActivity().getApplicationContext()); 
     // get Internet status 
     isInternetPresent = cd.isConnectingToInternet(); 

     // check for Internet status 
     if (isInternetPresent) { 

      String namespace = getResources().getString(R.string.NAMESPACE); 
      String url = getResources().getString(R.string.URL); 
      String soapaction = getResources().getString(R.string.SOAP_ACTION); 
      String login = getResources().getString(R.string.login); 
      String mdp = getResources().getString(R.string.mdp); 

      isUrlAvailable = cd.isUrlAvailable(); 

      // check for Internet status 
      if (isUrlAvailable) { 

       String idApplication = Installation.id(getActivity()); 

       SOAPContact soapContact = new SOAPContact(namespace, url, soapaction, login, mdp); 

       soapContact.saveParams(getResources().getString(R.string.origine), db); 

       result = 1; 
      } else { 
       result = 2; 
      } 
     } else { 
      result = 3; 
     } 

     return result; 
    } 

    @Override 
    protected void onPostExecute(Integer result) { 
     super.onPostExecute(result); 
    } 

    @Override 
    protected void onPreExecute() { 
     Log.i(TAG, "onPreExecute"); 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     Log.i(TAG, "onProgressUpdate"); 
    } 
} 

私はこのラインで私のアプリのcrashaをエラー得ることはありません:。 整数taskResult = task.execute()を取得();

答えて

0

は、それが

+0

OKですが、私は私が持っていると思いますexecute.get()での例外。 – Ben

+0

のような非同期タスクを実行するだけです。新しいAsyncSoapCall .execute(); –

+0

asyntaskを呼び出すメインクラスのintを取得する方法は? – Ben

0

あなたはドキュメントを読みましだ

@Override 
protected void onPostExecute(Integer result) { 
    super.onPostExecute(result); 
int yourNum = result; 
} 

ようonPostExecuteから値を取得しようか? https://developer.android.com/reference/android/os/AsyncTask.html

AsyncTaskには「取得」メソッドがありません。 OnPostExecuteメソッドを定義する必要があります。このメソッドは、Integerをパラメータとしてタスクが終了したときに呼び出されます。ここで

public class MyActivity extends Activity 
{ 
    private Integer myInteger; 
    private void blabla(){ 
     Simulation.AsyncSoapCall task = new Simulation.AsyncSoapCall() { 
      @Override 
      protected void onPostExecute(Integer result) { 
       //... Your code here ... 
        MyActivity.this.myInteger = result; 
        MyActivity.this.myMethod(result); 
      } 
     } 
     try { 
      task.execute(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    protected void myMethod(Integer integer){ 
    } 
} 
+0

AsyncTaskを呼び出している私のメインクラスの値を取得したい – Ben

+0

私は私のexempleを完了しました。 onPostExecuteからプロパティを設定したり、メソッドを呼び出すことができます –

0

は、インタフェースの助けを借りて、1つのメソッド

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    static String TAG=MainActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     AsyncSoapCall request = new AsyncSoapCall(new AsyncSoapCall.AsyncSoapInterface() { 
      @Override 
      public void callBack(String callBackValue) { 

       Log.d(TAG,callBackValue); 

      } 
     }); 
     request.execute(); 


    } 
} 

AsyncSoapCall.java

public class AsyncSoapCall extends AsyncTask<Void,Void,Void> { 


    interface AsyncSoapInterface{ 


     void callBack(String callBackValue); 
    } 

    AsyncSoapInterface callbackObj; 

    AsyncSoapCall(AsyncSoapInterface callbackObj) 
    { 
     callbackObj = callbackObj; 


    } 




    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     callbackObj.callBack("Your value"); 

    } 
} 
関連する問題