2017-12-04 20 views
0

注:私はオブジェクト指向プログラミングとアンドロイドスタジオで初めてのことですので、用語ではうまくやっていません。アクティビティの変数をクラスメソッドから設定できません

アンドロイドスタジオでは、JSONフェッチタスク用のクラスを作成しました。 (私はバックグラウンドオーバーライドにdoを含めません)。今、私の活動で

public class jsonTasks extends AsyncTask<String, String, String> { 


public interface AsyncResponse { 
    void processFinish(String output); 
} 

private AsyncResponse delegate = null; 

jsonTasks(AsyncResponse delegate){ 
    this.delegate = delegate; 
} 

@Override 
protected void onPostExecute(String result) { 
    delegate.processFinish(result); 
} 

public class activity extends Activity { 
    // in here I've declared the string variable 
    String valuableInfo; 

    // FIRST TASK 
    jsonTasks asyncTask = new jsonTasks(new jsonTasks.AsyncResponse() { 

     @Override 
     public void processFinish(String output) { 
      String TAG = activity.class.getSimpleName(); 
      JSONObject info; 

      //i do stuff with the json here 
      //i set the textboxes normally 
      txtSumName.setText(sumInfo.getString("name")); 

      //but setting the string valuableInfo is not working 
      valuableInfo = "info I took from json operation" 

     }); 
    // and here I execute 
    asyncTask.execute("url"); 

    // SECOND TASK 
    jsonTasks asyncTask2 = new .... { 
    ................. 
    } 
    asyncTask2.execute("https://example.com/" + valuableInfo); 
} 

私はその変数を使用したい使用してURLにvaluableInfoフェッチ継続することを別の「asyncTask2」です。

2番目の "asyncTask2"を実行すると、変数は常にnullです。

答えて

3

AsyncTaskは、非同期に操作を実行します。つまり、すぐに結果が得られない場合は、valueableInfoを使用する前に完了するまで待つ必要があります。オーバーライドできる方法があります。onPostExecuteと呼ばれています。これは、タスクが完了し、情報が利用可能になった後にトリガーされます。ここで2番目のタスクを実行すると、その時点ではnullになりません。

また、おそらく2つのタスクをマージすることもできますか?

+0

申し訳ありませんコード上でonPostExecuteメソッドオーバーライドを追加しました。 これはすべてonPostExecuteで実行されます。 (メインポストを編集しました) 変数宣言と関係があると思います。私は本当にわからない。 – quelotic

+0

2番目のAsyncTaskはprocessFinisheコールバックをまだ待っていません。processFinish()内の最後の行にasyncTask2.execute()を入れてください。 – Vlad

+0

上記のコードから、2つのjsonTaskを作成しています。新しいjsonTask(JsonTask.Response {})のようなものを試してみて、 'new'キーワードを2回使用しないでください。 –

関連する問題