Я задал этот вопрос вчера вечером, но не думаю, что предложил достаточно информации, поэтому я постараюсь быть более тщательным!
Я пытаюсь сделать так, чтобы, когда пользовательрегистры для моего приложения, их данные вместе с некоторыми другими переменными будут сохранены в базе данных Firebase Realtime.Я продолжаю получать ошибку сериализации, когда учетная запись пытается зарегистрироваться.
Не найдено свойств для сериализации в классе 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)
Я убедился, что все мои переменные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;
}
И у меня также естьproguard включен, и я добавил правила, чтобы сохранить класс пользователя и класс 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 *;
}
. Я не уверен, что у меня есть свои правила, или если у меня есть некоторые ненужные правила, но это все процесс обучения, поэтому, пожалуйста, дайте мне знать, есличто-то выглядит не так или у вас есть предложение о том, как исправить ошибку!
Извините за частую публикацию
Мой User.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;
}
}