NullPointerException при инициализации массива через сервис - PullRequest
0 голосов
/ 14 апреля 2019

Я работаю над приложением, в котором пользователь может видеть список фильмов.Я изначально создал это без службы, но сейчас пытаюсь сделать все управление базой данных через службу.Сначала я пытаюсь получить список фильмов из базы данных.Однако я продолжаю сталкиваться с этим исключением.Я использую базу данных 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)
...