Currently I'm using RecyclerView from Android to show some data that I get from Firebase. I'm using MVC design pattern so I had to pass some data from the view (actViewDB), to the controller(Controller) and then to the Model class (DataModel). Unfortunately I always get the Java NullPointerException error like this :
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)
My thought is the code can't Initialize the RecyclerView if executed from different class like implementing MVC architecture. here's the code:
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>
This question is an updated question from my first question at Recycle View doesn't show data from adapter Maybe this is an ordinary question about NullPointerException but this question is about implementing MVC on Android, so i'm sorry if this question have already asked.