Итак, я пытаюсь сделать снимок моей базы данных и добавить элементы со своим дочерним элементом в строки массива.
![My database looks like this](https://i.stack.imgur.com/j5jCo.png)
Моя основная деятельность выглядит следующим образом
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.tva c .akshayejh.firebasesearch, PID: 24798 java .lang.NullPointerException: попытка вызвать виртуальный метод 'java .lang.String in.tva c .akshayejh.firebasesearch.AdvancedQuery.getName ()' для пустой ссылки на объект in.tva c .akshayejh .firebasesearch.AdvancedSearch.dataQuery (AdvancedSearch. java: 140) в in.tva c .akshayejh.firebasesearch.AdvancedSearch.access $ 500 (AdvancedSearch. java: 20) в in.tva c .akshayjh 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 @@ 16.0.4: 63) на com.google.firebas e.database.core.view.EventRaiser $ 1.run (com.google.firebase: firebase-database @@ 16.0.4: 55) в android .os.Handler.handleCallback (Обработчик. java: 873) в android .os.Handler.dispatchMessage (Обработчик. java: 99) в android .os.Looper.l oop (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) по тел. android .internal.os.ZygoteInit.main (ZygoteInit. java: 858)