В настоящее время я использую RecyclerView из Android, чтобы показать некоторые данные, полученные из Firebase. Я использую шаблон проектирования MVC, поэтому мне пришлось передать некоторые данные из представления (actViewDB), в контроллер (Controller), а затем в класс Model (DataModel). К сожалению, я всегда получаю ошибку Java NullPointerException, например:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ryzen.pajakcerdas, PID: 5559
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:117)
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:149)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:29)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:54)
at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:31)
at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:31)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:198)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
at com.example.ryzen.pajakcerdas.actViewDB.showDatabase(actViewDB.java:23)
Я думаю, что код не может инициализировать RecyclerView, если он выполняется из другого класса, как, например, реализация архитектуры MVC.
вот код:
actViewDB.java
public class actViewDB extends AppCompatActivity {
private List<DataModel> modelList;
private RecyclerView rc;
private dataAdapter adapter;
private actViewDB mMainActivity;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recycle_viewdatabase);
Controller.getData();
}
public void showDatabase(List<DataModel> mUsername){
modelList = new ArrayList<>();
this.modelList = mUsername;
Log.d("ISI_SHOWDB", "" + modelList.toString());
this.rc = findViewById(R.id.recycler_view);
rc.setLayoutManager(new LinearLayoutManager(this));
rc.setHasFixedSize(true);
adapter = new dataAdapter();
adapter.setNotes(modelList);
rc.setAdapter(adapter);
}
}
Controller.java
public class Controller {
public static void getData(){
DataModel.getData();
}
public static void ifSuccess(List<DataModel> mUsername){
final actViewDB avd = new actViewDB();
avd.showDatabase(mUsername);
}
}
DataModel.java
public class DataModel {
public static void getData() {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("dataObjek");
List<DataModel> mUsername = new ArrayList<>();
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mUsername.clear();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String alamat = ds.child("alamat").getValue(String.class);
long harga = (long) ds.child("harga").getValue();
long njkp = (long) ds.child("njkp").getValue();
Integer pbb = ds.child("pbb").getValue(Integer.class);
Log.d("TAG", alamat + " / " + harga);
mUsername.add(new DataModel(alamat, harga, njkp, pbb));
Controller.ifSuccess(mUsername);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Controller.ifFail();
}
});
}
}
recycle_viewdatabase.xml
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem = "@layout/card_viewdatabase"/>
</android.support.design.widget.CoordinatorLayout>
Этот вопрос является обновленным вопросом из моего первого вопроса на Просмотр корзины не показывает данные с адаптера
Может быть, это обычный вопрос о NullPointerException, но этот вопрос касается реализации MVC на Android, поэтому извините, если этот вопрос уже задавался.