首页 > 解决方案 > 空对象引用上的 java.lang.NullPointerException。在firebase android studio中访问“kelas”时

问题描述

我试图从我的数据库(kelas)中获取这些特定数据。我在这里做的是获取这个 kelas 值并将其存储到String kelasingetList()并使用它IF来检查它是否具有 value 10 or 11,假设String kelasingetList()具有 value 10,如果它true那么我将在 recycleview( databaseReference = FirebaseDatabase.getInstance().getReference("DaftarMapel10");)中存储一些数据,但它不起作用,我试图更改代码但仍然得到java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

正如您在评论中看到的那样,@YegorftString kelas = snapshot.getValue(String.class); This var is null. Make sure, that it is present in your database.但我不明白,我尝试使用构造函数但结果相同。

更新:所以在从这篇文章中阅读了这个答案之后,没有结果。所以这就是问题所在,我在数据库中的路径不等于用户 id( .getUid),这就是为什么我的 String kelas 为 null 或 throw 的原因NullPointerException,它没有得到kelas数据库中的值,因为path错误或不等于到.getUid(). 因此,无论谁遇到和我一样的问题,请检查数据库中的路径和代码,检查value.

这是我的片段:

public class NilaiFragment extends Fragment {

FirebaseAuth firebaseAuth;
String userID;
DatabaseReference databaseReference;
private NilaiViewModel nilaiViewModel;
DatabaseReference matchData;
FirebaseFirestore firebaseFirestore;
private List<NilaiHelperClass> list;
NilaiHelperAdapter nilaiHelperAdapter;
RecyclerView nilaiRecyclerView;
DatabaseReference rootRef;
DatabaseReference yourRef;
String userid;


public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    nilaiViewModel = new ViewModelProvider(this).get(NilaiViewModel.class);
    View root = inflater.inflate(R.layout.fragment_nilai, container, false);

    firebaseAuth = FirebaseAuth.getInstance();
    userID = firebaseAuth.getCurrentUser().getUid();
    userid = firebaseAuth.getCurrentUser().getUid();
    databaseReference = FirebaseDatabase.getInstance().getReference("DaftarMapel10");
    matchData = FirebaseDatabase.getInstance().getReference().child("AkunSiswa");

    nilaiRecyclerView = root.findViewById(R.id.rvNilaiKelas);
    nilaiRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    nilaiRecyclerView.setNestedScrollingEnabled(false);
    nilaiRecyclerView.setHasFixedSize(false);
    list = new ArrayList<>();


    getList();


    return root;
}

这是发生错误的地方:

    private void getList(){

    FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    firebaseDatabase.getReference().child("AkunSiswa").child(userid).child("kelas").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            String kelas = snapshot.getValue(String.class);
            if (kelas.equals("10")){
                databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        for(DataSnapshot dataSnapshot:snapshot.getChildren()){
                            NilaiHelperClass nilaiHelperClass = dataSnapshot.getValue(NilaiHelperClass.class);
                            list.add(nilaiHelperClass);
                        }
                        nilaiHelperAdapter = new NilaiHelperAdapter(list);
                        nilaiRecyclerView.setAdapter(nilaiHelperAdapter);
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {

                    }
                });
            }
            if (kelas.equals("11")){
                nilaiRecyclerView.setVisibility(View.GONE);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

这是错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
    at com.example.skripsi.ui.Nilai.NilaiFragment$1.onDataChange(NilaiFragment.java:125)
    at com.google.firebase.database.Query$1.onDataChange(Query.java:189)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
    at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:237)
    at android.app.ActivityThread.main(ActivityThread.java:7948)
    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:1075)

这是我的数据库:

这是我的数据库

以防万一你想看看我的 databaseReference(DaftarMapel10) 看起来像:

这是 DaftarMapel10

标签: javaandroidfirebasefirebase-realtime-databasenullpointerexception

解决方案


推荐阅读