我在向Realm数据库添加新对象时遇到问题。 我在主活动中有Product类扩展了Realm对象,并且拥有了我的主要代码。当我不使用
启动应用程序时 Product product1 = myRealm.createObject(Product.class);
输入的对象会添加(显示在屏幕上)到“领域列表”中,并且当我进行其他活动时它们也会消失(也是一个问题,但并非如此)。 我在Logcat中看到了该代码字符串的引用。 “ java.lang.IllegalStateException:无法在写事务之外修改托管对象。”
product也是一个字符串,所以现在您了解了什么意思
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();
}
});
当用户输入产品名称并在“警报”对话框中按“添加”时,我想将产品保存到数据库和RealmList中。 (希望它们显示在屏幕上)
答案 0 :(得分:1)
您需要在事务内创建RealmObject
,因为异常也会告诉您。
看看:https://realm.io/docs/java/latest/#transaction-blocks
在您的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
或至少从事务块内的Realm中获取它,但是如果不使用Realm来创建一个全新的项目,我很难进行测试。