我想從 uid 中恢復資料,然后在 RecyclerView 中顯示它們。
多虧了 uid,我設法在 Withdrawal 下恢復了孩子/父母。
這就是它在 Java 中的樣子:
referenceWithdraw = FirebaseDatabase.getInstance().getReference().child("Withdraw");
Query queryUid = referenceWithdraw.orderByChild("uid").equalTo(user.getUid());
queryUid.get().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
for (DataSnapshot dataSnapshot : task.getResult().getChildren()) {
String id = dataSnapshot.child("id").getValue(String.class)
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
} else {
///
}
});
String id = ... 檢索子值。
到目前為止一切都很好,除非我在下面添加這個
String id = ...:
referenceWithdraw.child(id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
WithdrawProfile profile = snapshot.getValue(WithdrawProfile.class);
list.add(profile);
adapter.notifyDataSetChanged();
}
我的 Logcat 中出現此錯誤:
com.google.firebase.database.DatabaseException: Failed to convert a value of type java.lang.String to int
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertInteger(CustomClassMapper.java:364)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToPrimitive(CustomClassMapper.java:290)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:215)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToType(CustomClassMapper.java:179)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$100(CustomClassMapper.java:48)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.deserialize(CustomClassMapper.java:593)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.deserialize(CustomClassMapper.java:563)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:433)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80)
at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:203)
at com.pckage.app.android.withdraw.Withdraw$1.onDataChange(Withdraw.java:62)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:264)
at android.app.ActivityThread.main(ActivityThread.java:8306)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
最后是我的 WithdrawProfile :
public class WithdrawProfile {
private String date, email, status, id;
private int prize;
public WithdrawProfile(){}
public WithdrawProfile(String date, String email, String status, String id, int prize) {
this.date = date;
this.email = email;
this.status = status;
this.id = id;
this.prize = prize;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getPrize() {
return prize;
}
public void setPrize(int prize) {
this.prize = prize;
}
}
我的資料庫:
{
"Daily" : {
"KuTKHdv1qeYS1NeQVZlqYdZYyNi1" : {
"date" : "07/01/2022"
}
},
"Users" : {
"KuTKHdv1qeYS1NeQVZlqYdZYyNi1" : {
//Other value
"uid" : "KuTKHdv1qeYS1NeQVZlqYdZYyNi1"
}
},
"Withdraw" : {
"-MszSsu9rn6XzRMUNgTc" : {
"date" : "09/01/2022",
"id" : "-MszSsu9rn6XzRMUNgTc",
"email" : "[email protected]",
"prize" : "1000",
"statut" : "Pending",
"uid" : "KuTKHdv1qeYS1NeQVZlqYdZYyNi1"
}
}
}
感謝您的時間
uj5u.com熱心網友回復:
問題在于從資料庫中讀取這個值:
"prize" : "1000",
在您的 Java 類中,您定義prize為 int:
public int getPrize() {
return prize;
}
public void setPrize(int prize) {
this.prize = prize;
}
但在您的資料庫中,它存盤為字串值:"1000". 由于它們不是同一型別,因此 Firebase 無法讀取該prize值并引發錯誤。
解決方案是將獎品存盤為(整數)數字:
"prize" : 1000,
或者也讓它在你的 Java 代碼中成為一個字串:
private String prize;
...
public String getPrize() {
return prize;
}
public void setPrize(String prize) {
this.prize = prize;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/408755.html
標籤:
