【问题标题】:AsyncTask Android ProgressBar not showing [Possible Duplicate]AsyncTask Android ProgressBar 未显示 [可能重复]
【发布时间】:2013-08-21 12:52:33
【问题描述】:

首先我想说的是,我知道在 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);

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

谢谢!!

【问题讨论】:

    标签: android android-asynctask android-progressbar


    【解决方案1】:

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

    Object o = task.get();
    

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

    1. 您可以从onPostExecute() 调用Activity 方法来处理数据。你如何做到这一点取决于它是否是一个内部类。如果是,那么就没有问题。如果它是一个单独的文件,那么您可以将Activity 引用传递给您的AsyncTasks 构造函数,并使用它来调用Activity 方法。 These SO answers show how to do this

    2. 您还可以在AsyncTask 完成时使用接口创建回调。 This SO answer covers doing this

    【讨论】:

    • 非常感谢@codeMagic,我在这里有点失去理智:)
    猜你喜欢
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多