Итак, я разрабатываю простое приложение чата, и я хочу добавить значение из моей базы данных, и оно будет сохранено Test Object, как показано в Login * 1004. * process.
База данных в реальном времени
{
"Message" : {
"null_UserA" : {
"-M2DtFhvy_JPWMDkZI4L" : {
"Pengguna" : "<expected Nama>",
"Pesan" : "<Message>"
}
}
}
},
"Users" : {
"1TAOY5pLmwXBhrce9FcWy3wuFFS2" : {
"Name" : "UserA",
"email" : "useremail"
}
}
}
Test. java
package com.bruh.chatapp;
import java.io.Serializable;
import androidx.annotation.Keep;
@Keep
public class Test implements Serializable {
static String Nama = "";
Test(){
}
public Test(String Nama){
this.Nama = Nama;
}
public static String getNama() {
return Nama;
}
public static void setNama(String nama) {
Nama = nama;
}
}
Логин
auth.signInWithEmailAndPassword(user,pass).addOnCompleteListener(Masuk.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
uid = auth.getCurrentUser().getUid();
reference = getDatabase.getReference("Users").child(uid);
reference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
for(DataSnapshot ff : dataSnapshot.getChildren()){
Test Pesan = ff.getValue(Test.class);
}
}
});
И тогда значение объекта, полученное из Структура базы данных , будет использоваться Процессом чата ниже
Процесс чата
firebaseDatabase = FirebaseDatabase.getInstance();
final DatabaseReference reference1 = firebaseDatabase.getReference("Message/"+ Test.Nama+"_"+Pesan.chatWith);
final DatabaseReference reference2 = firebaseDatabase.getReference("Message/"+ Pesan.chatWith+"_"+Test.Nama);
kirim.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String isiPesan = ketikPesan.getText().toString();
if(!isiPesan.equals("")){
Map<String,String> messageTextBody = new HashMap<String,String>();
messageTextBody.put("Pesan",isiPesan);
messageTextBody.put("Pengguna", Test.Nama);
reference1.push().setValue(messageTextBody);
reference2.push().setValue(messageTextBody);
ketikPesan.setText("");
}
}
});
reference1.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Map<String,String> map = (Map<String,String>) dataSnapshot.getValue();
String pesan = map.get("Pesan").toString();
String pengguna = map.get("Pengguna").toString();
if(pengguna.equals(Test.Nama)){
addMessageBox(pesan, 1);
}else{
addMessageBox(pesan, 2);
}
}
Но проблема в том, что значение Объекта, к несчастью полученное, равно> нулевому значению, затем отображается это сообщение об ошибке
Сообщение об ошибке
Process: com.bruh.chatapp, PID: 2604
java.lang.NullPointerException
at com.bruh.chatapp.Obrol$2.onChildAdded(Obrol.java:86)
at com.google.firebase.database.core.ChildEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.1:79)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.1:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.1:55)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5019)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Как получить данные, извлеченные из базы данных реального времени, и использовать их в другом месте, кроме процедуры onChildAdded?