короче. Приложение вылетает, когда я хочу получить данные из базы данных Firebase. Вот код:
database = FirebaseDatabase.getInstance();
commu = database.getReference("Community");
longi = voteLoni.getText().toString();
lati = voteLati.getText().toString();
final String latiLong = lati + " - " + longi;
commu.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Community")
.child(latiLong);
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
count= dataSnapshot.child("count").getValue(long.class);
....
Структура: Дети Сообщества - это согласования
DB
- Community
- 89.8 - 90.9
- count: 4
- example: 2
- example2: 4
- example3: 8
- 120.9 - 89.9
- count: 45
- example: 24
- example2: 40
- example3: 81
И вот в чем ошибка:
Process: package, PID: 21441
java.lang.NullPointerException: Attempt to invoke virtual method 'long java.lang.Long.longValue()' on a null object reference
at app.Activity.Real$2$1.onDataChange(Real.java:122)
at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@16.0.3:183)
at com.google.firebase.database.obfuscated.zzap.zza(com.google.firebase:firebase-database@@16.0.3:75)
at com.google.firebase.database.obfuscated.zzca.zza(com.google.firebase:firebase-database@@16.0.3:63)
at com.google.firebase.database.obfuscated.zzcd$1.run(com.google.firebase:firebase-database@@16.0.3:55)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6589)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Но в другом упражнении я использую тот же код count= dataSnapshot.child("count").getValue(long.class); - для подсчета кликов пользователя - и он работает ...
заранее спасибо
Редактировать:
Я добавил второго потомка и несколько значений в базу данных. DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Community").child(latiLong); тоже редактируется, но это не так?




Нет необходимости писать вложенные слушатели ..
Если у вас есть такая структура:
DB
- Community
- 1
- count: 4
И у вас нет доступа к дочернему 1, тогда просто сделайте следующее:
database = FirebaseDatabase.getInstance();
commu = database.getReference("Community");
commu.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()){
count= ds.child("count").getValue(Long.class);
}
}
.....
Это получит значение count.
эй, я попробовал еще раз. Когда детей больше, чем один, он не работает. Так это работает только с одним ребенком? Когда я добавляю еще один, он вылетает с той же ошибкой нулевой точки
если у вас есть еще один ребенок, вам нужно написать childName= ds.child("messages").getValue(Long.class);
к сожалению, у меня это не работает. Хорошо, я должен сказать, что теперь в нем есть еще три значения, и я хочу их все. Я отредактировал пост. Есть ли у вас какие-либо идеи?
сделать это int example = ds.child("example").getValue(Integer.class);
Спасибо. Таким образом, с этим кодом нет сообщения об ошибке. Но как я могу использовать его вне цикла for? Я объявил int вне цикла, извините, я не знаком с программированием
Отметьте это stackoverflow.com/questions/48720701/…
Большое спасибо, сэр!