Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试获取项目或插入时使用文件室持久性返回空数据库_Android - Fatal编程技术网

Android 尝试获取项目或插入时使用文件室持久性返回空数据库

Android 尝试获取项目或插入时使用文件室持久性返回空数据库,android,Android,使用文件室持久性时,当尝试在项目中插入或选择数据库时,会出现以下错误: 空对象引用上的AppDataBase.getMovieDao() 与该过程相关的类别如下: AppDataBase类: @Database(entities = {Movies.class}, version = 1) public abstract class AppDataBase extends RoomDatabase { public static final String DB_NAME = "Movi

使用文件室持久性时,当尝试在项目中插入或选择数据库时,会出现以下错误:

空对象引用上的AppDataBase.getMovieDao()

与该过程相关的类别如下:

AppDataBase类:

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

    public static final String DB_NAME = "Movies";
    private static AppDataBase INSTANCE;

    public static AppDataBase getDataBase(Context context){
        if (INSTANCE == null){
            INSTANCE = Room.databaseBuilder(context.getApplicationContext(),AppDataBase.class,DB_NAME).build();
        }
        return INSTANCE;
    }

    public abstract MovieDao getMovieDao();
}
Dao类:

@Dao
public interface MovieDao {

    @Insert
    void insertAll(Movies movies);

    @Update
    void updateAll(Movies... notes);

    @Query("SELECT * FROM moviestb")
    List<Movies> getAll();

    @Delete
    void deleteAll(Movies... notes);

}
正在搜索注册:

public void loadFromDB(){
    db.getDataBase(view.getContext());
    if(db.getMovieDao().getAll().size() > 0){
        adapter.setResults(db.getMovieDao().getAll());
    }else{
        Toast.makeText(view.getContext(),"Não há filmes cadastrados",Toast.LENGTH_SHORT).show();
        view.getActivity().finish();
    }
}
插入:

public View.OnClickListener onSaveClick(final String plot, final String diretor, final String autor,
                                            final String nome, final String tipo, final String ano, final String ator, final String imdb) {
        return new View.OnClickListener() {
            @Override
            public void onClick(View itemView) {
                db.getDataBase(view.getContext());
                Movies movies = new Movies(nome,plot,imdb,"",ator,ano,tipo,diretor,autor);
                new InsertAsyncTask(db).execute(movies);

            }
        };
    }

    private class InsertAsyncTask extends AsyncTask<Movies,Void,Void>{
        private AppDataBase db;
        public InsertAsyncTask(AppDataBase appDataBase) {
            db = appDataBase;
        }

        @Override
        protected Void doInBackground(Movies... params) {
            db.getMovieDao().insertAll(params[0]);
            return null;
        }
    }

获取数据库时发生崩溃,我做错了什么?谢谢大家!

db
显然是
null
。你的问题没有显示你在哪里给它赋值


请注意,
getDataBase()
是一种
静态方法。也许您应该在某个地方有一个
db=AppDataBase.getDataBase()
语句。

db
显然是
null
。你的问题没有显示你在哪里给它赋值


请注意,
getDataBase()
是一种
静态方法。也许您应该在某个地方有一个
db=AppDataBase.getDataBase()
语句。

是的,我的数据库是空的。例如,我在loadfromdb上获得de值。@HenriqueMendes:请理解所有
db.getDataBase(view.getContext())调用是无用的。首先,
db
null
,因此它们应该崩溃。其次,忽略返回值,这是调用该方法的关键。是的!非常感谢。是的,我的数据库是空的。例如,我在loadfromdb上获得de值。@HenriqueMendes:请理解所有
db.getDataBase(view.getContext())调用是无用的。首先,
db
null
,因此它们应该崩溃。其次,忽略返回值,这是调用该方法的关键。是的!非常感谢。
public View.OnClickListener onSaveClick(final String plot, final String diretor, final String autor,
                                            final String nome, final String tipo, final String ano, final String ator, final String imdb) {
        return new View.OnClickListener() {
            @Override
            public void onClick(View itemView) {
                db.getDataBase(view.getContext());
                Movies movies = new Movies(nome,plot,imdb,"",ator,ano,tipo,diretor,autor);
                new InsertAsyncTask(db).execute(movies);

            }
        };
    }

    private class InsertAsyncTask extends AsyncTask<Movies,Void,Void>{
        private AppDataBase db;
        public InsertAsyncTask(AppDataBase appDataBase) {
            db = appDataBase;
        }

        @Override
        protected Void doInBackground(Movies... params) {
            db.getMovieDao().insertAll(params[0]);
            return null;
        }
    }
public void loadFromDB(){
    db.getDataBase(view.getContext());
    if(db.getMovieDao().getAll().size() > 0){
        adapter.setResults(db.getMovieDao().getAll());
    }else{
        Toast.makeText(view.getContext(),"Não há filmes cadastrados",Toast.LENGTH_SHORT).show();
        view.getActivity().finish();
    }
}