#java #android #realm
#java #Android #realm
Вопрос:
У меня возникла проблема с добавлением новых объектов в базу данных Realm. У меня есть расширенный объект Realm класса продукта и мой основной код в основном действии. Когда я запускаю приложение без
Product product1 = myRealm.createObject(Product.class);
введенные объекты добавляются (отображаются на экране) в список Realm, и они исчезают, когда я перехожу к другому действию (тоже проблема, но не тот случай). Я вижу ссылку на эту строку кода в 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();
}
});
Я хочу сохранить продукты в базе данных и RealmList, когда пользователь вводит название своего продукта (ов) и нажимает Добавить в диалоговом окне предупреждения. (хотите, чтобы они отображались на экране)
Ответ №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 внутри.