2016-08-04 7 views
-2

私は、それがコードや方法活動に提示し、その活動が

public class AsynClassValue 
{ 
    public static int a; 

    public void getValue() 
    { 
      Intent intent = new Intent(MyApplication.getContext(),AsyncActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      MyApplication.getContext().startActivity(intent); 

      System.out.println("value of variable a"+a); 
    } 
} 

その名前はAsynClassValueある一つの非活動のJavaクラス以下のいるしている非活動クラスから呼び出されるAsyncTask仕上げまでのプログラムの流れを停止する方法getValue()メソッドでこのクラスの新しいアクティビティを開始しています。

私はアプリケーションコンテキストを持つMyApplicationクラスを使用しています。 AsyncActivity

Activityあり、それはそれでAsyncTaskを有し、そのonPostExecute()方法で、私はAsynClassValueの静的変数「A」に値を代入していますし、最終的に私は「」でAsynClassValueクラスを変数の値を印刷しています。

問題は、変数 "a"の値がnullですが、印刷文はインテントの開始後であることが問題です。

プログラムの制御フローを停止する方法アクティビティクラスによるすべてのタスク終了は、インテントを使用して開始され、その次のプリントステートメントの後に開始されます。

+0

* AsyncTaskを使用しないでAsyncTaskが終了するまでの流れを止める方法 – Selvin

答えて

0

あなたはそうではありません。代わりに、あなたの場合のprintlnを新しい方法に移動します。 Activity/AsyncTaskが完了すると、この新しいメソッドを呼び出します(プロジェクトの構造に応じて、これは他のものを含むかもしれません)。

だからあなたのようなもので終わる:あなたは)onPostExecuteで「」適切な値を(与え終えた後で、doLater()を呼び出すように手配

public class AsynClassValue 
{ 
    public static int a; 

    public void getValue() 
    { 
      Intent intent = new Intent(MyApplication.getContext(),AsyncActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      MyApplication.getContext().startActivity(intent); 
    } 

    public void doLater() 
    { 
      System.out.println("value of variable a"+a); 
    } 
} 

。この例では、doLater()を静的にすることによって物事を単純化できますが、それはもっと複雑な状況では機能しません。

+0

実際には別のクラスのgetValue()メソッドからその変数 "a"を返すが、return文はintentとiが得られる前に実行する変数 "a"のヌル値 –

+0

基本的には、バックグラウンドタスクが終了するまでアプリがフリーズすることなくgetValue()を一時停止することはできません。あなたは 'a'を使い、そこにdoLater()と同等のものを作成し、他のメソッドも分割する必要があります。 –

+0

変数 "a"がonPostExecuteの値を代入するまでgetValue()の制御フローを保持したいのですが、ThreadSleep(1000)を試してみましたが、バックグラウンドタスクを停止せずにスレッドを使用してプログラムフローを停止するにはどうすればよいですか? –