好的,我已经获得了这个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());
}
}
答案 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