Android Room не вставляет объект с автоматически сгенерированным первичным ключом

Я просто хотел сделать очень простое приложение базы данных в Android Studio для функции вставки, и я пытаюсь вставить строку для таблицы «Items». Когда запускаю, ошибок нет. Но когда я нахожусь в самом приложении, после ввода имени элемента и при его сохранении мое приложение вылетает. У меня нет проблем, когда я вручную просто ввожу идентификатор элемента после удаления «autoGenerate = true».

Я все еще новичок в Room и тренируюсь. Я проверил некоторые из размещенных здесь вопросов об автогенерированных первичных ключах, но пока не нашел исправления. Заранее прошу прощения, если об этом уже спрашивали.

Вот мое определение класса Item:

 @Entity(tableName = "items")
 public class Item {

  @PrimaryKey (autoGenerate = true)
  private int id;

  @ColumnInfo(name = "item_name")
  private String name;


  public int getId() {
     return id;
  }


  public void setId(int id) {
     this.id = id;
  }


  public String getName() {
     return name;
  }

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

Мой Дао:

@Dao
public interface MyDao {


@Insert
public void addItem(Item item);

}

И это мой код, который я использовал для получения информации путем ввода пользователем и для вставки:

private EditText ItemName;

ItemName = view.findViewById(R.id.et_item_name); //et_item_name is an edittext
String itemname = ItemName.getText().toString();

 Item item = new Item();
 item.setName(itemname);

 MyActivity.appDatabase.mydao().addItem(item);

Класс базы данных:

@Database(entities = {Item.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

public abstract MyDao mydao();
}

Моя деятельность:

public class MyActivity extends AppCompatActivity {

    public static FragmentManager fragmentManager;
    public static AppDatabase appDatabase;
    private String DB_NAME = "db_items";

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

        fragmentManager = getSupportFragmentManager();
        appDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, DB_NAME).allowMainThreadQueries().build();    //allow main thread queries is only temporary. It's just for testing purposes.
    }
}

Пожалуйста, также добавьте трассировку сбоя.

Markus Penguin 27.09.2018 10:21

Для справки: developer.android.com/reference/android/arch/persistence/roo‌ m /…

Roberto Manfreda 27.09.2018 10:48
0
2
496
0

Другие вопросы по теме