2013-06-05 41 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