将asynctask的结果返回到片段

时间:2013-06-05 18:51:10

标签: android android-fragments android-asynctask

首先,关于我的项目的一些信息:

我有一个由几个片段组成的应用程序。 (我有一个扩展FragmentActivity的类和另一个扩展FragmentPagerAdapter的类。) 实际上我的代码在Fragments中运行。

我在其中一个片段中调用asynctask进行一些计算。 asyncTask是一个单独的文件,该类不在Fragment类中。

所以1个文件是asynctask,另一个是fragmet(来自片段的变量不能直接被asynctask访问!!!)。

我可以使用ProgressDialog显示asyncTask的结果。 但是我希望能够将数据(asynctask的结果)返回给我片段中的变量。到目前为止我尝试的是:

  1. 使用asyncatask.execute()
  2. 中的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类型的封闭实例”

    我不知道还有什么可以尝试的。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

您可以使用在UI线程中运行的onPostExecute方法,并在doInBackground完成后调用。您可以在Fragment中覆盖它,如下所示:

new myAsyncTask() {

        @Override
        protected void onPostExecute( Result result ) {

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