Я ранее задавал почти такой же вопрос.Но ответ был не так хорош или просто не достаточно хорош.Я хотел начать снова, и теперь у меня много проблем.
Вот этот пост.
Создание приложения для голосования по базе данных
Итак, пока у меня есть другая идея.
На этот раз есть только одно значение, которое подсчитывает голоса, но приложение не получает фактическую сумму значения "count".
Вот мой код:
database = FirebaseDatabase.getInstance();
names= database.getReference("Test");
final Name name = new Name(txtName.getText().toString(), score);
names.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
if (dataSnapshot.child(name.getName()).exists()) {
up.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
names.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
score = dataSnapshot.child("Test").child("Name").getValue(long.class);
score += 1;
final Name name = new Name(txtName.getText().toString(), score);
try {
names.child(name.getName()).setValue(name);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Toast.makeText(Result.this, "Thank you for voting", Toast.LENGTH_SHORT).show();
Intent homeIntent3 = new Intent(Result.this, StartActivity.class);
startActivity(homeIntent3);
}
});
Вот база данных

Так что, если имя не 'Если я не существую, я могу легко добавить голос «за» / «против» со счетом = 1 или счетом = -1.
Но если имя существует, возникает проблема с изменением значения оценки.
Приложение вылетает со следующей ошибкой
java.lang.NullPointerException: Attempt to invoke virtual method 'long java.lang.Long.longValue()' on a null object reference
at user.prof.name.Activities.Result$1$1$1.onDataChange(Result.java:80)
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)
И это строка ошибки в коде
score = dataSnapshot.child("Test").child("Name").getValue(long.class);
Я не эксперт в базе данныхпрограммирование, а что не так?Не тот ребенок?
Я также пытался сохранить «счет» в виде строки и проанализировать его в длинное значение.Но это тоже не работает.
Пожалуйста, помогите мне.Надеюсь, вы можете.