首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从OnPostExecute更新UI (异步)

从OnPostExecute更新UI (异步)
EN

Stack Overflow用户
提问于 2016-02-23 10:06:39
回答 1查看 367关注 0票数 1

我有一个代表迷宫的数组。在UI中,迷宫被表示为按钮的行和列。在异步任务的doInBackground方法中,我搜索了一个路径,并使用导致目标的路径初始化了一个解决方案数组。我要做的是更新这些按钮的按钮文本,以显示通向目标的路径。我在OnPostExecute里面做这个。但是,它不起作用。它甚至不执行启用解决方案按钮的最后一行。我在哪里做什么?

代码语言:javascript
运行
AI代码解释
复制
private void updateUI() {
    Button cell;
    TableRow row;

    do {
        row = (TableRow) (State.maze.getChildAt(solution.row));
        cell = (Button) (row.getChildAt(solution.col));
        cell.setText(State.pathCell);
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        solution = solution.next;
    } while (solution.next != null);
}

@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    updateUI();
    //Enable solution button
    State.solveResetButton.setEnabled(true);

}

更新:我检查了“解决方案”变量是否包含了一个解决方案,并且它确实包含了有效的数据。我也尝试过删除睡眠,但没有效果。

更新: Logcat输出(红色的输出)

代码语言:javascript
运行
AI代码解释
复制
 02-23 13:09:15.471 4640-4640/? E/Zygote: MountEmulatedStorage()
 02-23 13:09:15.471 4640-4640/? E/Zygote: v2
 02-23 13:09:15.471 4640-4640/? E/Zygote: accessInfo : 0
 02-23 13:09:15.471 4640-4640/? E/SELinux: [DEBUG] get_category: variable seinfo: default sensitivity: NULL, cateogry: NULL
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-23 10:33:20

solution.next的值不会在while循环中更新。这将导致无限循环,因此您的updateUI()方法永远不会停止执行。

此外,onPostExecute作为AsyncTask的一部分总是在主线程上调用。您不希望在主线程上使用Thread.sleep。这是获取ANR的一个很好的方法。

关于如何做到这一点,有许多可能的方法。考虑一下使用Handler作为主线程的如下内容:

代码语言:javascript
运行
AI代码解释
复制
private void updateUI() {
    Button cell;
    TableRow row;

    if (solution != null){
        row = (TableRow) (State.maze.getChildAt(solution.row));
        cell = (Button) (row.getChildAt(solution.col));
        cell.setText(State.pathCell);
        solution = solution.next;
        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                updateUI(); 
            }
        }, 100);
    }
}

您还可以使用一个新的AsyncTask来实现这一点,使用publishProgress来调用UI线程

代码语言:javascript
运行
AI代码解释
复制
private void updateUI(){
    new AsyncTask<Solution, Solution, Void>(){
        @Override
        protected Void doInBackground(Solution... solutions) {
            Solution solution = solutions[0];
            do {
                publishProgress(solution);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                solution = solution.next;
            }
            while(solution.next != null);
            return null;
        }

        @Override
        protected void onProgressUpdate(Solution... values) {
            super.onProgressUpdate(values);
            Solution solution = values[0];
            row = (TableRow) (State.maze.getChildAt(solution.row));
            cell = (Button) (row.getChildAt(solution.col));
            cell.setText(State.pathCell);
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            //Enable solution button
            State.solveResetButton.setEnabled(true);
        }
    }.execute(solution);
}

@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    updateUI();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35584983

复制
相关文章
Python中的类、对象、继承
上述访问级别更多的是一种编程约定,即便是以双下划线开头的字段,在类的外部也是可以访问的,但不建议这么做。示例代码如下:
雪飞鸿
2018/09/05
2.3K0
Python中的类、对象、继承
PHP 面向对象类的继承
PHP的单继承特点 : 单继承,一个子类只能继承一个父类, 想要达到继承多个类的效果可以采用链式继承
很酷的站长
2023/02/03
6190
类和对象-继承
定义类时,下级别的成员除了拥有上一级的共性,还有自己的特性,就可以考虑使用继承的技术,减少代码的重复
WuShF
2023/02/21
6940
类和对象-继承
类与对象,类的继承,类的派生,类的组合,多态
在python中先有类再有对象,类和对象,你可以看成,类是把对象的相同特征和相同方法汇总再一起,再根据类来生成对象,这个对象具有类的特征与方法
小小咸鱼YwY
2019/07/24
1.2K0
【Python】面向对象编程—类的继承
面向对象中的继承也是指子类(派生类)可以继承父类(基类、超类)的特征和行为,使得子类具有父类的所有属性和方法,并且可以定义自己独有的属性和方法。
阿黎逸阳
2021/03/24
5610
类与对象(一)—— 类(继承)
大西瓜:“类是构造对象的模板,由类构造对象的过程称为创建类的实例。可以说对象是类的实例!”
东边的大西瓜
2022/05/05
3910
类与对象(一)—— 类(继承)
课时38:类与对象:继承
现在需要扩展游戏,对鱼类进行细分,有金鱼(Goldfish)、三文鱼(Salmon)、鲤鱼(Carp),还有鲨鱼(Shark)。那么我们来思考一个问题:能不能不要每次都从头到尾去重新定义一个新的鱼类呢?因为我们知道大多数鱼的属性和方法是相似的,如果有一种机制可以让这些相似的东西得以自动传递,那就方便快捷多了。这种机制就是今天要讲的:继承。
py3study
2020/01/19
3790
课时38:类与对象:继承
类的继承
例子以图书馆中的书入库归类为例。 以下是简化后的父类Book(也可称为基类)。 目的是通过继承该父类,产出Computer(计算机)子类。 并且,子类拥有新方法say,输出自己的书名。
我是leon
2019/08/28
9300
类的继承
继承描述的是子类与父类之间的关系,是一种什么是什么的关系。要找出这种关系,必须先抽象再继承,抽象即抽取类似或者说比较像的部分。
py3study
2020/01/15
7920
类的继承
类的继承
类的继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,或者子类从父类处继承发放,使得子类具有父类相同的行为。
算法与编程之美
2023/08/22
1490
类的继承
类的继承
实验目的:掌握类的继承、抽象类的定义和使用、对象的向上转型。 实验内容:已知若干图形,求以该图形为底的锥体的体积。 实验要求:用面向抽象的思想实现。 实验步骤: 1、程序总体框架
不会写代码的杰尼
2022/05/19
7540
类的继承
【C++】继承 ① ( 面向对象特点 | 类之间的关系 | 单继承与多继承 | 继承关系特性 )
本篇博客开始 讲解 IS-A 类关系 中的 继承关系 ( 泛化关系 Generalization ) ;
韩曙亮
2023/10/15
2320
JavaScript对象的继承
基于原型链,即把一个对象的原型设置为另一个对象的实例,那么这个对象实例也就拥有了另一个对象上的属性。
闲花手札
2021/11/17
7260
关于Java中的对象、类、抽象类、接口、继承之间的联系
寒假学习JavaSE基础,其中的概念属实比较多,关联性也比较大,再次将相关的知识点复习一些,并理顺其中的关系。
xbhog
2021/03/20
9080
【C++】类的封装 ① ( 类和对象 | 面向对象三大特征 - 封装 继承 多态 | 类的封装引入 )
" 面向对象编程 " 是一种 " 编程范式 " , 可以适用于所有的 高级语言 , C++ 也包括在内 ;
韩曙亮
2023/10/15
2120
类继承的问题
首先确定好确定好哪个类作为父类,哪个类作为子类,同时要让父类所有能够进行继承的属性前加上public
算法与编程之美
2023/08/22
940
类继承的问题
Python类的继承
类的继承可以看成对类的属性和方法的重用,能够大大的减少代码量,继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,也就是说在python中支持一个儿子继承多个爹。
王大力测试进阶之路
2022/06/07
1.2K0
python类的继承
python在类的继承时,需要注意,当子类定义了构造方法的时候,那么父类的构造方法就不会被自动调用了
灯珑LoGin
2022/10/24
8590
Java子类与父类之间的对象转换(说明继承)
在使用Java的多态机制时,常常使用的一个特性便是子类和父类之间的对象转换。从子类向父类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子类对象的时候,通过把变量定义为父类型,我们可以通过一个变量,使用该父类型的所有子类型实例;从父类型向子类型的转换称为向下转换(downcasting),通过向下转换,我们能在必要的时候,将父类型变量转换成子类型变量,使用一些通过子类型才能够使用的方法。以下是我对于对象转换的一些个人理解,如有不对,欢迎指正,虚心向大神们请教。
用户7886150
2020/12/10
3.8K0
PHP面向对象-继承和派生类的定义(一)
继承是一种面向对象编程机制,它允许一个新的类从现有的类中继承属性和方法。在继承中,现有的类称为父类或超类,新的类称为子类或派生类。子类继承了父类的属性和方法,并且可以添加自己的属性和方法,或者覆盖继承的方法。
堕落飞鸟
2023/04/28
4420

相似问题

当你继承的时候,你会继承基类中的超类的对象吗?

236

从使用‘&’字符组成的类继承

14

UML -类继承,你继承了什么?

31

无法创建由从多个类继承的类组成的AngularJS服务。

12

继承与组成

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文