Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何知道SQLite查询何时完成_Android_Database_Sqlite_Retrofit - Fatal编程技术网

Android 如何知道SQLite查询何时完成

Android 如何知道SQLite查询何时完成,android,database,sqlite,retrofit,Android,Database,Sqlite,Retrofit,好的,我得到了这个改造调用,它接收一个对象列表并将插入到本地SQLite数据库中。我想显示一条消息,说明操作成功,按下Ok按钮将打开一个新活动 如何检查查询是否已完成,以便显示消息 final ContactApi contactApi = retrofit.create(ContactApi.class); Call<List<Contact>> callContact = contactApi.getContact(token); callContact.enque

好的,我得到了这个改造调用,它接收一个对象列表并将插入到本地SQLite数据库中。我想显示一条消息,说明操作成功,按下Ok按钮将打开一个新活动

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

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());
            }
final ContactApi ContactApi=改装.create(ContactApi.class);
调用callContact=contactApi.getContact(令牌);
callContact.enqueue(新回调(){
@凌驾
公共响应(响应、改装){
List contactList=response.body();
如果(联系人列表!=null){
试一试{
DBHelper DBHelper=新的DBHelper(TokenActivity.this,token);
SQLiteDatabase conn=dbHelper.getWritableDatabase();
RepoContact RepoContact=新的RepoContact(conn);
//将每个联系人插入数据库
用于(续c:联系人列表){
寄主寄主(c);
Log.i(“ACTTOKEN”,“联系人插入ID:+c.getId());
}
}catch(sqlitee异常){
Log.i(“ACTTOKEN”,“插入时失败诱饵:”+e.getMessage());
}

}

使用侦听器()将代码包装在
try{…}finally{…}
块中,并使用
transactionListner
检查事务中的一切是否正常,以及try/finally中的一切

您拥有的很好,只需尝试添加
finally
块即可。。 像这样的

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

使用侦听器()将代码包装在
try{…}finally{…}
块中,并使用
transactionListner
检查事务中的所有内容以及try/finally中的所有内容是否正常

您拥有的很好,只需尝试添加
finally
块即可。。 像这样的

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

当查询成功执行时,可以选中insert语句返回long,然后选择long值

db.insert()

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

您可以选中insert语句,在查询成功执行时返回long,然后选择long值

db.insert()

返回新插入行的行ID,如果发生错误,返回-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
    }

}
for(int i=0;i
您可以尝试不同的循环,如下所示:

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
    }

}
for(int i=0;i
Ok,我添加了try{…}finally{…}块和监听器,现在为了测试,我必须在SQLiteTransactionListener的onCommit()或onRollback()方法上显示消息?是的。如果操作成功,它将转到finally()然后您可以显示消息。谢谢,它可以工作!但我想知道如何通过多个查询实现这一点?我有另一个屏幕,可以进行5次改装调用,并将其插入5个不同的表中,因此如果我最终在每个表上定义一个变量,然后在onCommit()上检查它们方法,测试将在每个查询完成后进行,对吗?嗯,我不知道您的代码,所以我不能说,但您可以在try块中运行5个查询,并在finally()块中执行操作。@Rafael“在每个查询完成后”应该做什么意思是?事务的目的是在成功结束时完成所有查询。如果要独立执行它们,必须在不同的事务中执行。好的,我添加了try{…}finally{…}块和侦听器,现在要测试,我必须执行代码以在onCommit()或onRollback()上显示消息SQLiteTransactionListener的方法?是。若操作成功,它将转到finally()然后您可以显示消息。谢谢,它可以工作!但我想知道如何通过多个查询实现这一点?我有另一个屏幕,可以进行5次改装调用,并将其插入5个不同的表中,因此如果我最终在每个表上定义一个变量,然后在onCommit()上检查它们方法,测试将在每个查询完成后进行,对吗?嗯,我不知道您的代码,所以我不能说,但您可以在try块中运行5个查询,并在finally()块中执行操作。@Rafael“在每个查询完成后”应该做什么意思?如果事务成功结束,则事务的目的是完成所有查询。如果要独立执行这些查询,则必须在不同的事务中执行。