如何在这个简单的数据库信息返回上实现多线程

时间:2017-04-27 18:38:49

标签: java android multithreading sqlite

任何想法如何实现多线程?在尝试实现一个简单的线程时,返回值会引起我的问​​题。

//Retrieving information from database
public Cursor getInformation(DatabaseOperations dop) {
    SQLiteDatabase SQ = dop.getReadableDatabase();
    String[] columns = {TableData.TableInfo.KEY_activity, TableData.TableInfo.KEY_date, TableData.TableInfo.KEY_hour, TableData.TableInfo.KEY_minute, TableData.TableInfo.KEY_second, TableData.TableInfo.KEY_distance};
    Cursor CR = SQ.query(TableData.TableInfo.TABLE_NAME, columns, null, null, null, null, null);
    return CR;
}

1 个答案:

答案 0 :(得分:0)

查看AsyncTask,或代表Handler,Messages和Runnables的HAMMER框架。

这是一个产生新线程并使用Runnable完成工作的示例,然后发布回调函数调用以发回结果。

interface DbOperation{
   void onQueryResult(Cursor c);
}

//Retrieving information from database
public void getInformation(final DatabaseOperations dop, final DbOperation callback) {

    new Thread(new Runnable(){
        @Override
        public void run(){
            SQLiteDatabase SQ = dop.getReadableDatabase();
            String[] columns = {TableData.TableInfo.KEY_activity, 
               TableData.TableInfo.KEY_date, TableData.TableInfo.KEY_hour, 
               TableData.TableInfo.KEY_minute, TableData.TableInfo.KEY_second, 
               TableData.TableInfo.KEY_distance};
             Cursor CR = SQ.query(TableData.TableInfo.TABLE_NAME, columns, null, null, null, null, null);
           callback.onQueryResult(CR);
        }
    }).start();
}

然后在调用方法时:

 getInformation(dop, new DbOperation(){
    @Override
    public void onQueryResult(Cursor c){
        if(c == null)
           return;
        // .. use the cursor, make sure to use Handler or runOnUiThread method
        // since this call will run on a Background thread and you can't update
        // the UI from a background thread
    }
 });

祝你好运,快乐的编码!