刷新数据Android应用程序

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 ..请帮忙!

mic*_*elg 8

首先,您不希望从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)