Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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
Java 创建领域对象时出现问题(IllegalStateException:无法在写事务之外修改托管对象)_Java_Android_Realm - Fatal编程技术网

Java 创建领域对象时出现问题(IllegalStateException:无法在写事务之外修改托管对象)

Java 创建领域对象时出现问题(IllegalStateException:无法在写事务之外修改托管对象),java,android,realm,Java,Android,Realm,我遇到了向领域数据库添加新对象的问题。 我在主活动中有产品类扩展领域对象和主代码。当我启动应用程序时没有 Product product1=myRealm.createObject(Product.class) 输入的对象被添加(显示在屏幕上)到领域列表中,当我转到另一个活动时,它们消失了(这也是一个问题,但并非如此)。 我在Logcat中看到了对该代码字符串的引用。“java.lang.IllegalStateException:无法在写事务之外修改托管对象。” 产品也是一个字符串,所以现在您

我遇到了向领域数据库添加新对象的问题。 我在主活动中有产品类扩展领域对象和主代码。当我启动应用程序时没有

Product product1=myRealm.createObject(Product.class)

输入的对象被添加(显示在屏幕上)到领域列表中,当我转到另一个活动时,它们消失了(这也是一个问题,但并非如此)。 我在Logcat中看到了对该代码字符串的引用。“java.lang.IllegalStateException:无法在写事务之外修改托管对象。

产品也是一个字符串,所以现在您了解了它的含义

setProduct

我在添加时也有问题

myRealm.commitTransaction()

或者别的什么

  public class MainActivity extends AppCompatActivity {
static View view1;
EditText editText;
static RealmList<Product> productRealmList;
static Realm myRealm = Realm.getDefaultInstance();

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

    Product TV = new Product("TV");
    Product watch = new Product("Watch");

    productRealmList = new RealmList<>();
    productRealmList.add(TV);
    productRealmList.add(watch);

    MyAdapter adapter = new MyAdapter(this, R.layout.adapter_layout, productRealmList);
    listView.setAdapter(adapter);


    findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            view1 = LayoutInflater.from(MainActivity.this).inflate(R.layout.alert_layout, null);
            editText = view1.findViewById(R.id.ent);
            new AlertDialog.Builder(MainActivity.this)
                    .setTitle("Create new product")
                    .setMessage("Put down the name of the new product")
                    .setView(view1)
                    .setNegativeButton("Cancel", null)
                    .setPositiveButton("Add",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
  Product product1 = myRealm.createObject(Product.class);
                                        product1.setProduct(editText.getText().toString());
productRealmList.add(product1);

                                }
                            })

                    .create()
                    .show();
        }
    });
public类MainActivity扩展了AppCompatActivity{
静态视图1;
编辑文本编辑文本;
静态RealmList productRealmList;
静态领域myRealm=Realm.getDefaultInstance();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
产品电视=新产品(“电视”);
产品手表=新产品(“手表”);
productRealmList=新的RealmList();
productRealmList.add(电视);
productRealmList.add(手表);
MyAdapter=新的MyAdapter(this,R.layout.adapter\u layout,productRealmList);
setAdapter(适配器);
findviewbyd(R.id.fab).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
view1=LAYOUTINGFLATER.from(MainActivity.this).充气(R.layout.alert\u layout,null);
editText=view1.findViewById(R.id.ent);
新建AlertDialog.Builder(MainActivity.this)
.setTitle(“创建新产品”)
.setMessage(“记下新产品的名称”)
.setView(视图1)
.setNegativeButton(“取消”,null)
.setPositiveButton(“添加”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
product1=myRealm.createObject(Product.class);
product1.setProduct(editText.getText().toString());
productRealmList.add(product1);
}
})
.create()
.show();
}
});

当用户输入他/她的产品名称并按下Add-in Alert Dialog(希望它们显示在屏幕上)时,我想将产品保存到数据库和RealmList中。

您需要在事务中创建
RealmObject
,异常情况也会告诉您

看看:

OnClickListener中执行以下操作:

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        final Product product1 = myRealm.createObject(Product.class);
        product1.setProduct(editText.getText().toString());
        productRealmList.add(product1);
    }
});

您可能还必须在事务中创建
productRealmList
,或者至少从事务块中的领域获取它,但是如果不创建一个全新的项目并在其中包含领域,我就很难进行测试。

您需要在事务中创建
RealmObject
,这也是一个例外是你

看看:

OnClickListener中执行以下操作:

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        final Product product1 = myRealm.createObject(Product.class);
        product1.setProduct(editText.getText().toString());
        productRealmList.add(product1);
    }
});
您可能还必须在事务中创建
productRealmList
,或者至少从事务块中的领域获取它,但是如果不创建一个包含领域的全新项目,我就很难进行测试