В настоящее время я использую RecyclerView
из Android, чтобы показать некоторые данные, которые я получаю из Firebase. Я использую шаблон проектирования MVC, поэтому мне пришлось передать некоторые данные из представления (actViewDB
), в контроллер (Controller
), а затем в класс модели (DataModel
). К сожалению, я всегда получаю ошибку Java NullPointerException
, подобную этой
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ryzen.pajakcerdas, PID: 3138
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ryzen.pajakcerdas/com.example.ryzen.pajakcerdas.actViewDB}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.ryzen.pajakcerdas.dataAdapter.setNotes(java.util.List)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.ryzen.pajakcerdas.dataAdapter.setNotes(java.util.List)' on a null object reference
at com.example.ryzen.pajakcerdas.actViewDB.showModelList(actViewDB.java:22)
Вот код
actViewDB.java
public class actViewDB extends AppCompatActivity {
private List<DataModel> modelList;
private RecyclerView rc;
private dataAdapter adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recycle_viewdatabase);
rc = findViewById(R.id.recycler_view);
rc.setLayoutManager(new LinearLayoutManager(this));
rc.setHasFixedSize(true);
modelList = new ArrayList<>();
}
private void showModelList() {
modelList.add(new DataModel("a", 2, 1, 3));
adapter.setNotes(modelList);
rc.setAdapter(adapter);
}
}
Почему это происходит? Извините, если этот вопрос уже задан, я уже ищу ответ несколько раз с прошлой недели, но все еще не могу это исправить. Ближайшая проблема, которую я обнаружил, - это Android: адаптер просмотра переработчика, но она все еще не решает мою проблему.
«адаптер» не инициализирован
modelList.add(new DataModel("a", 2, 1, 3));
-> ниже этой строки... добавить: adapter = new DataAdapter();
и ТОГДА ваш adapter.setNotes(modelList);
и т. д.
Большое спасибо, теперь это работает. Но хотите задать последний вопрос, как инициализировать RecycleView? Мне пришлось изменить showModelList() для вызова из контроллера, потому что я реализую архитектуру MVC.
Вы должны инициализировать adapter
перед вызовом его метода
adapter = new DataAdapter();
Спасибо, это работает. но затем у меня возникли новые проблемы: RecycleView имеет значение Null, потому что я изменил метод showModelList() для вызова из контроллера. я должен инициализировать RecycleView тоже? как это сделать?
нет, вам нужно получить ссылку на recyclerview от контроллера, вызвав activity.recyclerview, ведь это новая проблема, вам нужно задать новый вопрос и опубликовать свой код, чтобы мы могли вам помочь. не стесняйтесь голосовать за мой ответ. Рад был помочь.
Вы забыли инициализировать свой
adapter