首先我想说,我知道在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 thisAsyncTask
完成后,您还可以使用接口创建回调。 This SO answer covers doing this