Класс ViewModel, выбрасывающий нулевой указатель при попытке отобразить результаты из хранилища - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь отобразить результаты из api, когда кто-то нажимает на adapter, но я испытываю null pointer с классом view model. Это метод, с помощью которого я хочу отобразить результаты в моей MatchDetailActivity

    private TeamEntity entity;
    MatchViewModel viewModel;
    private MatchAdapter adapter;
    private ActivityMatchDetailBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_match_detail);

        if(getSupportActionBar()!=null)
            getSupportActionBar().hide();


        binding.displayMatch.setLayoutManager(new LinearLayoutManager(this));
        binding.displayMatch.setHasFixedSize(true);
        adapter = new MatchAdapter(this, entity);

}

 private void getTeamEvents(){
        viewModel.getTeamEvents(entity.getTeamId()).observe(this, eventsResults ->{

            if(eventsResults != null){
                adapter.setList(eventsResults);
            }
        });
    }

Но я продолжаю получать нулевой указатель здесь:

 viewModel.getTeamEvents(entity.getTeamId()).observe(this, eventsResults
->{

Ниже моя трассировка стека, любая помощь будет ценится.

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sportsapp/com.sportsapp.presentation.ui.MatchDetailActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.lifecycle.LiveData com.sportsapp.presentation.viewmodels.MatchViewModel.getTeamEvents(java.lang.String)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3555)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3707)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2220)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:8016)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.lifecycle.LiveData com.sportsapp.presentation.viewmodels.MatchViewModel.getTeamEvents(java.lang.String)' on a null object reference
        at com.sportsapp.presentation.ui.MatchDetailActivity.getTeamEvents(MatchDetailActivity.java:70)
        at com.sportsapp.presentation.ui.MatchDetailActivity.onCreate(MatchDetailActivity.java:54)

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

viewModel = новый ViewModelProvider (this) .get (MyViewModel.class);

0 голосов
/ 19 апреля 2020

Вы не указали значение для view model, где бы то ни было, добавьте следующую строку в onCreate()

viewModel = new ViewModelProvider(this).get(MyViewModel.class);

Надеюсь, это поможет

...