1

首先,我想说我知道关于 SO 有几个类似的问题,但没有人回答我的问题......

首先让我向您展示我的代码:

我有一个片段,它在加载时向服务器发送请求,解析服务器返回的 JSON,然后将解析的 JSON 作为对象返回。

我在 onCreateView 方法中初始化了一个进度条:

bar = (ProgressBar) mainView.findViewById(R.id.progressBar);

然后我创建了一个 Asynctask 扩展类的实例:

PolisotAsyncInfo task = new PolisotAsyncInfo();

然后调用execute方法,然后调用get函数:"

task.execute(new PolisotAsyncParameter(ClientMainActivity.mToken,ClientMainActivity.mUserID));
Object o = task.get();

我认为这是我做错了但不确定,我需要使用 get() 方法,因为我需要 doInBackround 返回的数据......

此时编译器转到 onPreExecute 方法,我将栏设置为可见:

bar.setVisibility(View.VISIBLE);

在 doInBackround 方法运行并执行所有不相关的事情之后

然后在那里调用 onPostExecute 方法我将栏设置为 GONE:

bar.setVisibility(View.GONE);

任何帮助将不胜感激,我有点迷失在这里......

谢谢!!

4

1 回答 1

2

我相信这条线是你怀疑的问题,

Object o = task.get();

get()阻止UI Thread. 不过,根据您的确切需求和配置,您有不同的选择来获取数据。

  1. 你可以调用一个Activity方法来onPostExecute()对数据做一些事情。你如何做到这一点取决于它是否是一个内部类。如果是,那么就没有问题。如果它是一个单独的文件,那么您可以将Activity引用传递给您AsyncTask的构造函数并使用它来调用该Activity方法。这些 SO 答案显示了如何做到这一点

  2. 您还可以在AsyncTask完成后使用接口创建回调。这个 SO 答案涵盖了这样做

于 2013-08-21T12:59:05.500 回答