2016-01-13 61 views
0

好吧,我有这个Retrofit调用接收对象列表并插入本地SQLite数据库。我想显示一条消息,说明操作成功时使用确定按钮,当按钮打开新的活动时。如何知道什么时候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()); 
      } 

}

回答

1

包装你的代码try{...}finally{...}块向监听器(beginTransactionWithListener(SQLiteTransactionListener transactionListener)),并使用transactionListner检查一切是否顺利的事务中,除了一切的try /终于之内。

你有什么好,只是尝试添加finally块.. 这样的事情..

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

好了,所以我我已经添加了try {...} finally {...}块和侦听器,现在要测试我必须执行代码以在SQLiteTransactionListener的onCommit()或onRollback()方法上显示消息? – Rafael

+0

是的。如果操作成功,它会进入finally(),然后你可以显示消息。 –

+0

谢谢,它的工作原理!但我想知道如何用多个查询来做到这一点?我有另一个屏幕,使5翻新调用,并插入到5个不同的表,所以如果我在每个终端上定义一个变量,然后检查onCommit()方法,测试将发生在每个查询完成后,对吧? – Rafael

0

您可以检查时,查询成功执行再长值插入语句返回长。

db.insert() 

返回新插入的行的行号,或-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 
    } 

} 
相关问题