2016-01-13 138 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 
    } 

} 
相關問題