Я просто хотел сделать очень простое приложение базы данных в 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.
}
}
Для справки: developer.android.com/reference/android/arch/persistence/roo m /…
Пожалуйста, также добавьте трассировку сбоя.