まず、私のプロジェクトに関するいくつかの情報:
複数のフラグメントで構成されるアプリケーションがあります。(FragmentActivity を拡張する 1 つのクラスと、FragmentPagerAdapter を拡張する別のクラスがあります。) したがって、実際には私のコードは Fragments 内で実行されています。
フラグメントの 1 つ内で asynctask を呼び出して、いくつかの計算を行います。asyncTask は別のファイルであり、クラスは Fragment クラス内にはありません。
したがって、1 つのファイルは asynctask で、別のファイルはフラグメントです (フラグメントの変数は asynctask から直接アクセスできません!!!)。
ProgressDialog を使用して、asyncTask の結果を表示できます。ただし、データ (asynctask の結果) をフラグメントにある変数に戻すことができるようにしたいと考えています。私がこれまでに試したことは次のとおりです。
- asyncatask.execute() から get() を使用する
私はこのようにそれをやろうとしました:
ボタンのクリック後に呼び出される次のコードを使用しました。
mytask1 = new myAsyncTask(this);
String result =mytask1.execute(value1).get();
ただし、これによりメイン スレッドが停止し、asynctask が完了するまで待機します。
2. loginSharePreferens の使用
loginPreferences = getActivity().getSharedPreferences("loginPrefs", Context.MODE_PRIVATE);
loginPrefsEditor = loginPreferences.edit();
loginPrefsEditor.putString("result", result);
loginPrefsEditor.commit();
これによりエラーが発生しました。
3.これもやってみた
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext() );
それは2番目の方法と似ていました。
4.値を設定するだけのメソッドをフラグメントに作成しようとし、フラグメント内でそれを呼び出そうとしました
MyFrragment1.this.setRestult(1); // is called in the onPostExecute of the asyncTask
public void setRestult(int result){
this.test1=result; ///inside of the fragment
}
これにより、エラーが発生しました:「タイプ MyFragment1 の囲んでいるインスタンスはスコープ内でアクセスできません」
他に何を試すべきかわかりません。何か案は ?