Max*_*gio 2 android web-services refresh timer
我创建了一个使用Web服务提供信息的android应用程序,然后当应用程序启动时,我将数据放入sqlite中,并从数据库管理所有内容.应用程序启动后,数据填充tablelayout.
现在我想每20秒刷新一次内容(因为来自webservice的信息可能会改变).
我怎样才能做到这一点?我使用了onResume方法,但是每次你回到tablelayout时我都不想刷新内容.
所以我想要做的是每20秒执行一次oncreate方法(连接web服务,填充我的tablelayout并显示它).我读了关于计时器或处理程序但我不知道怎么能这样做.
现在我有问题!
我从Web服务获取数据并在我的doInBackground中的数据库中插入数据..没关系.现在,我在onPostExecute方法中创建所有textview,tablerow等,但我有2个问题.第一,
UsuariosSQLiteHelper usdbh =
new UsuariosSQLiteHelper(this, "DBIncidentes", null, 1);
我在doInBackground方法中有一个上下文问题
在onPostExecute方法中,我对所有"this"都有同样的问题,比如 TableRow rowTitulo = new TableRow(this);
我知道这是一个上下文错误,我基本上知道上下文是如何工作的,但我不知道如何解决这个上下文问题.我认为初始化异步构造函数中的上下文可能有帮助,我替换在onpost ..请帮忙!
首先,您不希望从Web服务读取数据或将其写入onCreate方法中的SQLite数据库.您需要生成一个新线程来执行此操作,以便它不会导致应用程序冻结.您可以为此创建一个Thread或使用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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5241 次 |
| 最近记录: |