【问题标题】:return result from asynctask to a fragment从异步任务返回结果到片段
【发布时间】:2013-06-05 18:51:09
【问题描述】:

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

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

我在其中一个片段中调用异步任务来进行一些计算。 asyncTask 是一个单独的文件,该类不位于 Fragment 类中。

所以一个文件是异步任务,另一个是片段(片段中的变量不能被异步任务直接访问!!!)。

我可以使用 ProgressDialog 显示 asyncTask 的结果。 但是,我希望能够将数据(异步任务的结果)返回到我在片段中拥有的变量。到目前为止我尝试过的是:

  1. 使用来自 asyncatask.execute() 的 get()

我试着这样做:

我使用了以下在单击按钮后调用的代码。

mytask1 = new myAsyncTask(this);
        String result =mytask1.execute(value1).get();

但是这会导致主线程卡住并等待异步任务完成。

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 类型的封闭实例在范围内不可访问”

我不知道还能尝试什么。有什么想法吗?

【问题讨论】:

  • @Raghunandan 我认为你给我的链接正好相反。我想将异步任务的结果检索回我的片段
  • 另外,我的情况不同,我没有片段内的异步任务,而是单独的

标签: android android-fragments android-asynctask


【解决方案1】:

您可以使用在 UI 线程中运行并在 doInBackground 完成后调用的 onPostExecute 方法。您可以像这样在Fragment 中覆盖它:

new myAsyncTask() {

        @Override
        protected void onPostExecute( Result result ) {

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

【讨论】:

  • 您先生,为我节省了好几个小时!非常感谢))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
相关资源
最近更新 更多