如何知道SQLite查询何时完成

时间:2016-01-13 18:18:15

标签: android database sqlite retrofit

好的,我已经获得了这个Retrofit Call,它接收一个对象列表并将其插入到本地SQLite数据库中。我想显示一条消息,说明操作成功,按下按钮,按下按钮后会打开一个新活动。

如何检查我的查询是否已完成,以便显示该消息?

final ContactApi contactApi = retrofit.create(ContactApi.class);

Call<List<Contact>> callContact = contactApi.getContact(token);
callContact.enqueue(new Callback<List<Contact>>() {
    @Override
     public void onResponse(Response<List<Contact>> response, Retrofit retrofit) {

        List<Contact> contactList = response.body();

        if (contactList != null) {

            try {

                DBHelper dbHelper = new DBHelper(TokenActivity.this, token);
                SQLiteDatabase conn = dbHelper.getWritableDatabase();
                RepoContact repocontact = new RepoContact(conn);

                // Inserts each contact into the database
                    for (Contatc c : contactList) {

                        repositorioCadastro.inserirCadastro(c);

                        Log.i("ACTTOKEN", "Contact insert ID: " + c.getId());

                    }

            } catch (SQLiteException e) {
             Log.i("ACTTOKEN", "Faillure on insert: " + e.getMessage());
            }

}

3 个答案:

答案 0 :(得分:1)

使用侦听器(beginTransactionWithListener(SQLiteTransactionListener transactionListener))将代码包装在try{...}finally{...}块中,并使用transactionListner检查事务中是否一切顺利,以及try /中的所有内容最后。

你所拥有的是好的,只需尝试添加finally块.. 像这样......

 db.beginTransaction();
try {
 ...
 db.setTransactionSuccessful();
} finally {
 db.endTransaction();
}

答案 1 :(得分:1)

您可以尝试不同的循环,如下所示:

for(int i = 0; i < contactList.size(); i++) {

    Contact c = contactList.get(i);
    repositorioCadastro.inserirCadastro(c);
    Log.i("ACTTOKEN", "Contact insert ID: " + c.getId());

    if(i == (contactList.size() - 1)) {
        // DO SOMETHING HERE
    }

}

答案 2 :(得分:0)

您可以检查insert语句,当查询成功执行时返回long,然后返回long值。

db.insert()

返回新插入行的行ID,如果发生错误则返回-1