gpt4 book ai didi

android - 刷新数据 Android 应用程序

转载 作者:太空狗 更新时间:2023-10-29 15:48:48 24 4
gpt4 key购买 nike

我制作了一个使用 Web 服务获取信息的 Android 应用程序,然后当应用程序启动时,我将数据放入 sqlite 中,然后我管理数据库中的所有内容。应用程序启动后,数据会填充一个表格布局。

现在我想每 20 秒刷新一次该内容(因为来自网络服务的信息可能会更改)。

我该怎么做?我使用了 onResume 方法,但我不想每次返回 tablelayout 时都刷新内容。

所以我想做的是每 20 秒执行一次 oncreate 方法(它连接到一个网络服务,填充我的表格布局并显示它)。我阅读了有关计时器或处理程序的信息,但不确定如何执行此操作。

现在我有问题了!

我从 Web 服务获取数据并在我的 doInBackground 中将数据插入数据库..没关系。现在,我在 onPostExecute 方法中创建了所有 TextView 、表格行等,但我有 2 个问题。首先,

UsuariosSQLiteHelper usdbh =
new UsuariosSQLiteHelper(this, "DBIncidentes", null, 1);

我在 doInBackground 方法中遇到上下文问题

在 onPostExecute 方法中,我对所有“this”都有同样的问题,比如 TableRow rowTitulo = new TableRow(this);

我知道这是一个上下文错误,我基本上知道上下文是如何工作的,但我不知道如何解决这个上下文问题。我认为在异步构造函数中初始化上下文可能会有所帮助,我在 onpost 中进行了替换。请帮忙!

最佳答案

首先,您不想在 onCreate 方法中从 Web 服务读取数据或将其写入 SQLite 数据库。您需要生成一个新线程来执行此操作,这样它就不会导致您的应用程序卡住。您可以创建一个线程或使用 AsyncTask为了这。如果您使用 AsyncTask,则可以覆盖其 onPostExecute 方法。这将在主 UI 线程上执行,因此您可以在此方法中刷新 TableLayout。

一旦您让这段代码正常工作,那么您只需要安排它。最简单的方法是使用 Timer .以下是一些可帮助您入门的框架代码:

class MyTask extends AsyncTask<Void,Void, MyDataStructure>{
@Override
protected MyDataStructure doInBackground(Void... params) {
MyDataStructure data = new MyDataStructure();
// get data from web service
// insert data in database
return data;
}

@Override
protected void onPostExecute(MyDataStructure data) {
TableLayout table = (TableLayout) findViewById(R.id.out);
// refresh UI
}
}

Timer timer = new Timer();
TimerTask task = new TimerTask(){

@Override
public void run() {
new MyTask().execute();
}

};
long whenToStart = 20*1000L; // 20 seconds
long howOften = 20*1000L; // 20 seconds
timer.scheduleAtFixedRate(task, whenToStart, howOften);

关于android - 刷新数据 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7622797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com