2017-07-27 5 views
1

をしようとしたときに部屋の永続性を使用する:項目に挿入するかを選択させるためのデータベースを取得しようとしたとき、エラーが表示され、部屋の永続性を使用した作業ヌルデータベースをアイテムを取得またはリターンを挿入するために

AppDataBase.getMovieDao(

AppDataBaseクラス:

を次のように)」ヌルオブジェクト参照にプロセスに関連

クラスであります

ダオクラス:

@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); 

} 

Entityクラス:登録の検索

@Entity(tableName = "moviestb") 
public class Movies { 

    @PrimaryKey(autoGenerate = true) 
    @ColumnInfo(name = "idmovie") 
    private long id; 

    @ColumnInfo(name = "titlemovie") 
    private String titlemovie; 
........ 
} 

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; 
     } 
    } 
すべての検索

:データベースをフェッチしている間に

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(); 
    } 
} 

クラッシュが発生し、私が間違って何をやっていますか?ありがとうございました!明らかに、nullである。

答えて

1

dbである。あなたの質問には、どこに値を割り当てたかが示されていません。

getDataBase()staticメソッドです。たぶんdb=AppDataBase.getDataBase()というステートメントがどこかにあるはずです。

+0

はい、私のdbはnullです。私は例えばloadfromdbの価値を得ています。 –

+0

@HenriqueMendes:あなたの 'db.getDataBase(view.getContext());'コールはすべて役に立ちません。まず、 'db'は' null'なので、クラッシュするはずです。次に、そのメソッドを呼び出すポイントである戻り値を無視します。 – CommonsWare

+0

はい!ありがとうございました! –

関連する問題