如何在Firebase数据库中保存对象?

弗雷德里克·西里尔

我无法将对象添加到Firebase实时数据库。我尝试了以下代码。但是当此代码执行userRef.child(“ Users”)。child(Integer.toString(random.nextInt(100)))。setValue(newUser); 我的应用程序崩溃了。

    public class MainActivity extends AppCompatActivity {

    private FirebaseAuth mAuth;
    private DatabaseReference userRef;
    EditText nameEditText;
    EditText passEditText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        nameEditText = (EditText) findViewById(R.id.nameEditText);
        passEditText = (EditText) findViewById(R.id.passEditText);

        mAuth = FirebaseAuth.getInstance();
        //        signInAnonymously();
                mAuth.signInAnonymously().addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                    }

                    public void onFailure(Throwable throwable) {
                        throw new RuntimeException(throwable);
                    }
                });
    }
    public void createUser(View view){

        Random random = new Random();



        userRef = FirebaseDatabase.getInstance().getReference();



        String userN = String.valueOf(nameEditText.getText());
        String pass = String.valueOf(passEditText.getText());


        UserDetails newUser = new UserDetails(userN,pass);

        userRef.child("Users").child(Integer.toString(random.nextInt(100))).setValue(newUser);


    }
@IgnoreExtraProperties
public class UserDetails{

    public String userName;
    public String password;

    public UserDetails(){

    }

    public UserDetails(String userName, String userPass){

        this.userName = userName;
        this.password = userPass;
        Log.i("Check", this.userName);

    }

    public String getUserName() {
        return userName;
    }

    public String getPassword() {
        return password;
    }
}
}

这是logcat错误消息。

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.crossappfactory.username, PID: 20144
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
                   Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:4785) 
at android.view.View$PerformClick.run(View.java:19884) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5343) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
                   Caused by: com.google.firebase.database.DatabaseException: Invalid key: this$0. Keys must not contain '/', '.', '#', '$', '[', or ']'
at com.google.android.gms.internal.zzaiw.zziv(Unknown Source)
at com.google.android.gms.internal.zzaiw.zzau(Unknown Source)
at com.google.firebase.database.DatabaseReference.zza(Unknown Source)
at com.google.firebase.database.DatabaseReference.setValue(Unknown Source)
at com.crossappfactory.username.MainActivity.createUser(MainActivity.java:63)
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
at android.view.View.performClick(View.java:4785) 
at android.view.View$PerformClick.run(View.java:19884) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5343) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
弗兰克·范普菲伦

解决方案很简单,将UserDetails标记为静态,因此编译器不会生成额外的字段:

public static class UserDetails {

如果您有兴趣,请解释为什么需要这样做。

错误消息指出了问题所在,但在这种情况下很难解析:“无效的密钥:this $ 0。密钥不得包含'/'、'.'、'#'、'$','['或']'“

它说this$0,这是对您的UserDetails对象的引用$0指出,其一个内部类的MainActivity当您创建内部类时,该类的实例将获得一个额外的隐藏字段,该隐藏字段引用其包含的对象,以便您可以this.MainActivity在的代码中进行说UserDetails但是Firebase SDK无法处理此额外的隐藏字段,因此会引发异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在数据库中保存序列化对象

来自分类Dev

如何在firebase实时数据库中保存模型?

来自分类Dev

如何在 Firebase 实时数据库中保存生成的唯一 ID

来自分类Dev

如何在firebase实时数据库中保存文档参考

来自分类Dev

如何在MySQL数据库中保存ckeditor内容

来自分类Dev

如何在数据库中保存图像路径

来自分类Dev

如何在数据库中保存特殊字符

来自分类Dev

如何在数据库中保存PictureBox图像

来自分类Dev

如何在数据库中保存文件路径?

来自分类Dev

如何在数据库中保存用户的位置

来自分类Dev

如何在SQL数据库中保存列表?

来自分类Dev

如何在数据库中保存多个图像?

来自分类Dev

如何在数据库中保存数组-Rails

来自分类Dev

如何在Django的数据库中保存值?

来自分类Dev

如何在数据库中保存XML(writer)

来自分类Dev

如何在数据库中保存HTML

来自分类Dev

如何在数据库中保存图像路径

来自分类Dev

如何在SQL数据库中保存多个选项?

来自分类Dev

如何在数据库中保存用户的位置

来自分类Dev

如何在SQL数据库中保存列表?

来自分类Dev

如何在数据库中保存跟踪折线?

来自分类Dev

如何在数据库中保存IP地址

来自分类Dev

如何在数据库中保存Blob文件

来自分类Dev

如何在SqlLite数据库中保存歌曲?

来自分类Dev

如何在 Postgres 数据库中保存会话?

来自分类Dev

在 Firebase 数据库中保存 ArrayList

来自分类Dev

在使用数据库生成的列之一选项时,如何在Entity Framework中保存对象?

来自分类Dev

如何在 Firebase 数据库中保存多个日期,以便管理员可以跟踪特定日期的订单

来自分类Dev

如何在实时数据帧中保存sql数据库?闪亮的

Related 相关文章

热门标签

归档