【发布时间】:2018-10-19 23:19:57
【问题描述】:
我昨晚问了这个问题,但我认为我没有提供足够的信息,所以我将尝试更彻底!
我正在努力做到这一点,以便当用户注册我的应用程序时,他们的数据以及其他一些变量将保存在 Firebase 实时数据库中。当帐户尝试注册时,我继续收到序列化错误。
在类 com.google.firebase.database.obfuscated.zza$3 上找不到要序列化的属性
我已经尝试了无数方法来修复错误,但似乎没有真正修复它或在修复它方面取得任何进展。这是我目前使用的注册方式。
firebaseAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
//start profile activity here
User users = new User(username, email, wins, losses, balance);
FirebaseDatabase.getInstance().getReference("Users")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(users)
.addOnCompleteListener
(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(RegisterActivity.this, "Registration successful.", Toast.LENGTH_SHORT).show();
startActivity(new Intent(RegisterActivity.this, HomePage.class ));
} else {
Toast.makeText(RegisterActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
progressDialog.hide();
}
}
});
} else {
Toast.makeText(RegisterActivity.this, "Registration not successful, please try again.", Toast.LENGTH_SHORT).show();
progressDialog.hide();
}
}
});
特别是在这部分代码上调用了错误
.setValue(users)
我已经确保我的所有变量都是公开的,并且我还为所有内容添加了 getter 和 setter(我不知道是否有必要)。
我的用户类看起来像这样
public User(String userName, String email, int wins, int losses, double balance) {
this.userName = userName;
this.email = email;
this.wins = wins;
this.losses = losses;
this.balance = balance;
}
我还启用了 proguard,并添加了规则来保留我的 User 类和 RegisterActivity 类。这些是我添加的规则
-keepattributes Signature
-keepclassmembers com.example.brent.fifty_fifty.** {
*;
}
-keep class com.example.brent.fifty_fifty.RegisterActivity
-keep class com.example.brent.fifty_fifty.User
-keep class * {
public private *;
}
我不确定我的规则是否正确,或者其中是否有一些不必要的规则,但这都是一个学习过程,所以如果有任何问题或您对如何解决问题有任何建议,请告诉我错误!
抱歉这么频繁发帖
我的用户.class
package com.example.brent.fifty_fifty;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class User {
public String userName, email, specUserName;
public int wins, losses;
public double balance;
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String uid = user.getUid();
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users/"+uid);
public User() {
}
public User(String userName, String email, int wins, int losses, double balance) {
this.userName = userName;
this.email = email;
this.wins = wins;
this.losses = losses;
this.balance = balance;
}
public interface MyCallback{
void onSuccess(String userName);
}
public void getUserName(final MyCallback myCallback) {
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
specUserName = dataSnapshot.child("userName").getValue(String.class);
myCallback.onSuccess(specUserName);
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getWins() {
return wins;
}
public void setWins(int wins) {
this.wins = wins;
}
public int getLosses() {
return losses;
}
public void setLosses(int losses) {
this.losses = losses;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
【问题讨论】:
标签: java android firebase serialization firebase-realtime-database