【发布时间】:2020-03-09 14:54:39
【问题描述】:
所以,我正在尝试拍摄我的数据库的快照,并在数组字符串中添加项目及其子项。
我的主要活动是这样的
private Button mbutton;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference myRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_advanced_search);
mbutton = findViewById(R.id.button_search);
mFirebaseDatabase = FirebaseDatabase.getInstance();
myRef = mFirebaseDatabase.getReference();
mbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
goListener();
}
});
}
private void goListener() {
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
dataQuery(snapshot);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void dataQuery(DataSnapshot snapshot) {
for (int y = 0; y !=2; y++) {
for (DataSnapshot ds : snapshot.getChildren()) {
AdvancedQuery findInfo = new AdvancedQuery();
findInfo.setName(ds.child(String.valueOf(y)).getValue(AdvancedQuery.class).getName());
findInfo.setIngredients(ds.child(String.valueOf(y)).getValue(AdvancedQuery.class).getIngredients());
}
}
}
}
而我的 set 和 get java 文件是这样的
public class AdvancedQuery {
public String name, ingredients;
public AdvancedQuery(){ }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIngredients() {
return ingredients;
}
public void setIngredients(String ingredients) {
this.ingredients = ingredients;
}
}
但是,当我的程序到达 dataQuery 方法并尝试获取和设置名称和成分时,它会崩溃。有人可以解释我做错了什么吗?是否有更好的方法来使用数据库快照?
进程:in.tvac.akshayejh.firebasesearch,PID:24798 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String in.tvac.akshayejh.firebasesearch.AdvancedQuery.getName()” 在 in.tvac.akshayejh.firebasesearch.AdvancedSearch.dataQuery(AdvancedSearch.java:140) 在 in.tvac.akshayejh.firebasesearch.AdvancedSearch.access 500 美元(AdvancedSearch.java:20) 在 in.tvac.akshayejh.firebasesearch.AdvancedSearch$2.onDataChange(AdvancedSearch.java:115) 在 com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@16.0.4:183) 在 com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.4:75) 在 com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.4:63) 在 com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.4:55) 在 android.os.Handler.handleCallback(Handler.java:873) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
【问题讨论】:
-
添加崩溃日志可能有助于我们为您提供帮助。
-
如果应用程序崩溃,会有一个堆栈跟踪。请在 logcat 上查找,并将其添加到您的问题中。也请回复@AlexMamo
-
@Traendy 我已经在上面的帖子中包含了错误日志。
-
@AlexMamo,我已经在上面的帖子中包含了错误日志。
-
请编辑您的问题并向我们展示您设置适配器的代码。
标签: java android firebase firebase-realtime-database