android - Realm android executeTransactionAsync 不调用 onSuccess

标签 android realm

我正在尝试添加生成随机数据的学生( Realm 对象)的 50 条记录。 onSuccess 永远不会被调用。我需要在成功插入时执行一些任务....

   public class MainActivity extends AppCompatActivity {

private static final String ALPHA_NUMERIC_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

RealmList<Student> mStudentList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ((Button) findViewById(R.id.simple_insert)).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(MainActivity.this,SimpleInsertActivity.class));
        }
    });

    ((Button) findViewById(R.id.buld_insert)).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mStudentList = new RealmList<>();
            final Realm mRealm = Realm.getDefaultInstance();


            mRealm.executeTransactionAsync(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    for(int i=0;i<50;i++){
                        String s =randomAlphaNumeric(8);
                        Log.i(getClass().getSimpleName(),"------------------------name : " + s);

                        Student student = realm.createObject(Student.class);//new Student();
                        student.setName(randomAlphaNumeric(8));
                        mStudentList.add(student);
                    }
                    Log.i(getClass().getSimpleName(),"----------------------------inserting data");
                    realm.copyToRealmOrUpdate(mStudentList);
                }
            }, new Realm.Transaction.OnSuccess() {
                @Override
                public void onSuccess() {

                    Toast.makeText(MainActivity.this, "inserted successfully", Toast.LENGTH_SHORT).show();
                    Log.i(getClass().getSimpleName(),"----------------------------after success :: " +
                    mRealm.where(Student.class).findAll().size());
                }
            }, new Realm.Transaction.OnError() {
                @Override
                public void onError(Throwable error) {
                    Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show();
                    Log.e(MainActivity.this.getClass().getSimpleName(),"-----------------------error : " + error.toString());
                }
            });
            mRealm.close();


        }
    });

    ((Button) findViewById(R.id.delete)).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AppClass.deleteRealmDatabase();
        }
    });
}

public static String randomAlphaNumeric(int count) {
    StringBuilder builder = new StringBuilder();
    while (count-- != 0) {
        int character = (int)(Math.random()*ALPHA_NUMERIC_STRING.length());
        builder.append(ALPHA_NUMERIC_STRING.charAt(character));
    }
    return builder.toString();
}

public class Student extends RealmObject {
public static final String KEY_ROLL_NO = "rollNo";
public static final String KEY_NAME = "name";
@PrimaryKey
String rollNo;
String name;

public Student(String s) {
    this.rollNo = UUID.randomUUID().toString();
    this.name = s;
}

public Student() {

}

public String getRollNo() {
    return rollNo;
}

public void setRollNo(String rollNo) {
    this.rollNo = rollNo;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}


日志: ..................... [ 06-27 05:13:55.327 28186:28560 I/]------------------------名称:NRW29XS7

[ 06-27 05:13:55.327 28186:28560 I/]------------------------名称:2MS9QSB0

[ 06-27 05:13:55.327 28186:28560 I/]------------------------名称:BJ2JHHHV

[ 06-27 05:13:55.327 28186:28560 I/]----------------------------插入数据

最佳答案

我一直在主线程中关闭 Realm 实例,所以它没有获取实例并且没有调用 onSuccess

关于android - Realm android executeTransactionAsync 不调用 onSuccess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38048089/

相关文章:

android - 无法从 Gradle 中的 jitpack 添加库

realm - Realm 移动平台如何扩展?

android - Realm 模型类必须扩展 RealmObject 或实现 RealmModel 才能被视为有效的模型类

ios - 直接使用 Realm 对象还是映射到对象类?

ios - 等价查询 MagicalRecord -> Realm.io

android - 放大 android cordova 应用程序

java - 将逗号分隔的列表粘贴到 EditText 中并存储在 SQLite TABLE 的多行中

android - 在 Android 中应用移动动画后,单击操作在 android 按钮中不起作用

android - 重复类 kotlin 类 kotlin 版本 1.3.70

Swift Realm - 编写一个通用的主键自增函数