【问题标题】:Method don't update UI after AsynkTask方法在 AsynkTask 之后不更新 UI
【发布时间】:2012-04-15 21:33:19
【问题描述】:

我编写了一个 AsynkTask 女巫连接到数据库,然后将结果放入 UI。这很好用,但是我想包含一个对话框或其他东西,其他布局女巫显示一个进度条,然后更新 UI。

好吧,现在布局发生了变化,最后我有了“testGUI”布局,但它没有升级到 AsynkTask 数据。这是代码。非常感谢。

类 DatabaseAsync 扩展 AsyncTask {

    @Override
    protected void onPreExecute(){
        setContentView(R.layout.loading);
    }
    /**
     * Se ejecuta en el hilo secundario, en segundo plano
     */
    @Override
    protected JSONArray doInBackground(Void... params) {
        JSONArray jArray = new JSONArray();
        jArray = DatabaseController
                .rellenarArray("SomeURL");
        return jArray;
    }

    /**
     * Una vez terminado el hilo secundario se ejecuta esto
     */
    @Override
    protected void onPostExecute(JSONArray jArrayFull) {
        setContentView(R.layout.testgui);
         getQuestion(jArrayFull,1);
    }

}

【问题讨论】:

  • 您不应多次调用 setContentView,请查看此处了解更多信息:stackoverflow.com/questions/4018772/…
  • getQuestion(jArrayFull,1); 不更新任何 UI 或 DatabaseController.rellenarArray("SomeURL"); 不返回您期望的数据。你需要检查一下。
  • zapl,如果我不调用第二个布局,一切正常,两种方法都可以正常工作;)问题出在布局上;)

标签: java android json android-asynctask


【解决方案1】:

不能使用 setContentView() 两次。您必须获得对每个视图的引用并通过更改 onPostExecute() 中的属性来更新它。

【讨论】:

    【解决方案2】:

    显示进度条后,您的 UI 会如何显示?

    如果逻辑如下:

    1. 在 UI 上按 btn 或 sth 来启动 DB AsyncTask
    2. 启动对话活动,其中包含您要经常更新的进度条
    3. DB 任务完成它的工作并使用进度条更新对话活动
    4. 一旦 DB 任务完成,它会通知对话活动它已完成
    5. 对话活动达到 100% 和/或告诉用户一切正常并完成
    6. 用户可以在对话框活动上按下“确定”按钮并返回到用户初始化 DB 任务开始的 UI 活动

    ...那么您需要使用处理程序来更新对话活动。

    一旦用户在第 6 步中按下“确定”,UI 活动就会恢复 - 因此您必须确保在 UI 活动的 onResume 中更新您想要在 UI 活动上显示的任何内容

    应避免从您的 asynctask 对 UI 的任何直接调用 - 使用处理程序将您的后台工作任务与 UI 通信。

    如果您需要有关如何执行此操作的更多信息 - 只需查找处理程序和进度对话框,这里有几个教程。

    如果您不使用处理程序而是直接从后台工作人员活动调用 UI 活动方法,则 UI 可能会冻结,甚至在最坏的情况下被 Android 系统删除。

    如果您不需要经常更新进度条,那么您可以调用:

    textView.setText(result); in your onPostExecute method 
    

    或任何其他直接设置的 UI 元素

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      相关资源
      最近更新 更多