java - 空对象引用上的 java.lang.NullPointerException。在firebase android studio中访问“kelas”时
问题描述
我试图从我的数据库(kelas)中获取这些特定数据。我在这里做的是获取这个 kelas 值并将其存储到String kelas
ingetList()
并使用它IF
来检查它是否具有 value 10 or 11
,假设String kelas
ingetList()
具有 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
。
正如您在评论中看到的那样,@Yegorft
说String 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) 看起来像:
解决方案
推荐阅读
- java - Java 动态创建按钮并将参数传递给执行的操作
- php - 调用 POST 请求路由在 URL 中包含 index.php
- c# - 分配后意外的不等式
- javascript - 在 Mechanical Turk 人群中使用 Youtube Player API 不会触发 OnStateChange
- flask - 烧瓶部署到heroku
- python - 使用棉花糖反序列化 UUID
- outlook-redemption - 使用兑换更改 Outlook 中的发件人,但不使用配置文件中的帐户
- elasticsearch - Elasticsearch:有些字段会立即出现,有些字段会延迟出现
- c++ - 如何对二进制文件进行排序?
- html - 是否可以将文件拖放到标准 html textarea 中?