首先我要说的是,我知道在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);
任何帮助都会受到赞赏的人,我有点迷失在这里......
谢谢!
答案 0 :(得分:2)
我相信这条线是您怀疑的问题,
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