如何在后台运行查询

时间:2011-09-27 17:33:24

标签: android sql

我列出了不同类别的产品。我必须对它们进行排序。由于查询,加载需要更多时间。在两个活动之间,屏幕变黑了。我想在后台运行查询。我该怎么做以及如何在主要活动中使用其结果?       私有类InsertTask扩展AsyncTask {     String cat;

@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected Boolean doInBackground(String... params) {

 Boolean success = false;

    try {

        category(cat);
        success = true;
    } catch (Exception e) {
        if(e.getMessage()!=null)
            e.printStackTrace();
    }
    return success;
}



@Override
protected void onPostExecute(Boolean success) {
    super.onPostExecute(success);
}
private void category(String category) {

    try{
        Cursor1 = mDbHelper.fetchcategory(category);

          }catch(Exception e){
            Log.v("Excep", ""+e);
          }
    }

当被召唤时

    InsertTask task = new InsertTask();
    task.execute();

我在按钮中列出了类别。那我怎么能得到这些值呢?

3 个答案:

答案 0 :(得分:3)

您应该使用AsyncTask。还有一些more info

答案 1 :(得分:2)

你很好想到了AsyncTask。首先,您可以在类活动中将此类声明为内部(如果您之前没有这样做过),那么您就可以访问视图类成员。

您也可以通过创建将用于更新UI组件的线程和一个处理程序来执行此操作。请记住,如果您使用线程,则需要锁定/解锁数据库对象,因为线程安全(如果任何其他线程因任何原因访问数据库)。阅读有关dbs的线程安全性的更多信息。

答案 2 :(得分:1)

我正在自己做一些搜索,我看到了这个阅读,它相当长,但看起来非常有用,有很多代码示例。 (我为自己添加了书签。)

Threads, Async, and Handlers O MY!

但某种形式的线程就是罚单。

来自Android开发 (我最喜欢的代码片段)

public void onClick(View v) { 
new Thread(new Runnable() {   
public void run() {      
//Do Work here 
           }  
    }).start();
}