2013-06-05 54 views
0

首先,關於我的項目的一些信息:從asynctask返回結果到一個片段

我有一個由多個片段組成的應用程序。 (我有一個類擴展了FragmentActivity,另一個擴展了FragmentPagerAdapter。) 所以實際上我的代碼在Fragments中運行。

我在其中一個片段中調用了一個asynctask來做一些計算。 asyncTask是一個單獨的文件,該類不在Fragment類中。

所以1個文件是asynctask,另一個是fragmet(片段中的變量不能被asynctask直接訪問!!!)。

我可以使用ProgressDialog顯示asyncTask的結果。 但是我希望能夠將數據(asynctask的結果)返回到我的片段中的變量。什麼到目前爲止,我已經試過是:

  1. 運用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());

這是與第二方法類似嘗試。

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沒有外圍實例可在範圍內訪問「

我不知道還有什麼要嘗試。有任何想法嗎 ?

+0

http://stackoverflow.com/questions/16627492/how-to-return-an-object-to-the-fragment-from-a-nested- static-asynctask /類似的問題 – Raghunandan

+0

@Raghunandan我認爲你給我的鏈接是相反的。我想檢索asynctask的結果回我的片段 –

+0

另外,我的情況是不同的,我沒有asynctask裏面的片段,但分開 –

回答

6

您可以使用在UI線程中運行並在doInBackground完成後調用的onPostExecute方法。您可以覆蓋在你的Fragment這樣的:

new myAsyncTask() { 

     @Override 
     protected void onPostExecute(Result result) { 

      super.onPostExecute(result); 
      // Do something with result here 
     } 
    }.execute(value1); 
+0

謝謝!!!!有用! :) –

+0

你先生,救了我幾個小時!非常感謝)) – Sermilion