Я работаю над приложением, в котором пользователь может видеть список фильмов.Я изначально создал это без службы, но сейчас пытаюсь сделать все управление базой данных через службу.Сначала я пытаюсь получить список фильмов из базы данных.Однако я продолжаю сталкиваться с этим исключением.Я использую базу данных Room для хранения фильмов.
Прежде чем перемещать этот код в службу, я бы создал статическую базу MovieDatabase и через нее вызвал ее в DAO.Я сузил проблему и прокомментировал любой другой код, поэтому осталось четыре класса, из которых может возникнуть проблема.
Мой класс MovieDAO, который фактически общается с базой данных, выглядит следующим образом:
@Dao
public interface MovieDAO {
@Query("SELECT * FROM movies")
public List<Movie> getMovies();
}
Затем я создал интерфейс MovieDatabase, который выглядит следующим образом:
@Database(entities = {Movie.class}, version = 1)
public abstract class MovieDatabase extends RoomDatabase {
public abstract MovieDAO movieDAO();
}
Мой сервис MovieService выглядит следующим образом:
public class MovieService extends Service {
MovieDatabase db;
private final IBinder movieBinder = new LocalMovieBinder();
public MovieService() {
}
@Override
public IBinder onBind(Intent intent) {
return movieBinder;
}
public class LocalMovieBinder extends Binder {
MovieService getService(){
return MovieService.this;
}
}
public List<Movie> getMovies(){
ArrayList<Movie> tmpList = new ArrayList<>(db.movieDAO().getMovies()); //this is line 81
return tmpList;
}
И, наконец, мой MainActivity:
public class MainActivity extends AppCompatActivity {
public ArrayList<Movie> arrayOfMovies = new ArrayList<>();
MovieDatabase db;
MovieService movieService;
boolean isBound = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
movieService = new MovieService();
if (savedInstanceState != null) {
arrayOfMovies = savedInstanceState.getParcelableArrayList(SAVED_KEY);
} else {
arrayOfMovies = new ArrayList<>(movieService.getMovies()); //this is line 61
}
}
При запуске приложения возникает исключение:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.example.movielibrary.MovieDAO com.example.movielibrary.MovieDatabase.movieDAO()' on a null object reference
at com.example.movielibrary.MovieService.getMovies(MovieService.java:81)
at com.example.movielibrary.MainActivity.onCreate(MainActivity.java:61)