2016-01-13 3 views
0

Хорошо, у меня есть этот Retrofit Call, который получает список объектов и вставляет их в локальную базу данных SQLite. Я хочу показать сообщение о том, что операция прошла успешно с помощью кнопки Ok, которая при нажатии открывает новое действие.Как узнать, когда запрос 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, чтобы проверить все прошло хорошо ли в сделке, в дополнение ко всему, в попытке /, наконец.

, что у вас есть хорошая, просто попробуйте добавить finally блок .. что-то вроде этого ..

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

Ok, так что я вы добавили try {...} finally {...} блоки и слушатель, теперь для проверки я должен сделать код, чтобы показать сообщение в методе onCommit() или onRollback() SQLiteTransactionListener? – 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 
    } 

} 
Смежные вопросы