Итак, я создаю приложение для Android, которое хранит данные в локальной базе данных с помощью Room Persistance, извлекает их в список и отображает их в текстовом представлении.
Вот модель комнаты:
@Entity
public class RecipeModel {
@NonNull
@PrimaryKey
private String recipe_id;
private String publisher;
private String f2f_url;
private String title;
private String source_url;
private String image_url;
private Float social_rank;
private String publisher_url;
public RecipeModel(){
}
public RecipeModel(@NonNull String recipe_id, String publisher, String f2f_url, String title, String source_url, String image_url, Float social_rank, String publisher_url) {
this.recipe_id = recipe_id;
this.publisher = publisher;
this.f2f_url = f2f_url;
this.title = title;
this.source_url = source_url;
this.image_url = image_url;
this.social_rank = social_rank;
this.publisher_url = publisher_url;
}
}
Также определены функции get и set, но для целей я не буду их показывать.
Вот DAO:
@Dao
public interface DaoAccess {
@Insert
void insertOnlySingleRecipe (RecipeModel recipe);
@Insert(onConflict = REPLACE)
void insertMultipleRecipes (List<RecipeModel> recipes);
@Update
void updateRecipe (RecipeModel recipe);
@Delete
void deleteRecipe (RecipeModel recipe);
@Query("SELECT * FROM RecipeModel")
LiveData<List<RecipeModel>> getAllRecipes();
}
А здесьбаза данных:
@Database(entities = {RecipeModel.class}, version = 1, exportSchema = false)
public abstract class RecipeDatabase extends RoomDatabase {
public abstract DaoAccess daoAccess();
}
И, наконец, действие:
public class FavoritesActivity extends AppCompatActivity {
private static final String DATABASE_NAME="recipes_db";
private RecipeDatabase recipeDatabase;
private List<RecipeModel> recipeModelList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favorites);
recipeDatabase= Room.databaseBuilder(getApplicationContext(), RecipeDatabase.class, DATABASE_NAME)
.fallbackToDestructiveMigration()
.build();
String text="";
recipeModelList=getRecipes().getValue();
for(RecipeModel recipeModel :recipeModelList){
text+=recipeModel.getTitle()+" ";
}
TextView textView=(TextView) findViewById(R.id.textViewFavoritesList);
textView.setText(text);
}
public LiveData<List<RecipeModel>> getRecipes() {
return recipeDatabase.daoAccess().getAllRecipes();
}
}
Однако, когда я запускаю приложение и открываю действие, приложение вылетает.У меня есть некоторые данные, вставленные в базу данных, но она дает сбой.Есть идеи?