首先我想说,我知道在S.O上有几个类似的问题,但没有一个回答了我的问题...

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

我有一个片段,它在加载时向服务器发送请求,解析服务器返回的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);


任何帮助将不胜感激的家伙,我有点在这里迷路...

谢谢!!

最佳答案

我相信这是您所怀疑的问题,

Object o = task.get();


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


您可以从Activity调用onPostExecute()方法来处理数据。你如何做取决于它是否是一个内部类。如果是这样,那没有问题。如果它是一个单独的文件,则可以将Activity引用传递给AsyncTask构造函数,并使用该引用来调用Activity方法。 These SO answers show how to do this
AsyncTask完成后,您还可以使用接口创建回调。 This SO answer covers doing this

07-24 09:48
查看更多