无法将JSON对象插入Firebase实时数据库

时间:2017-03-19 11:09:11

标签: android json firebase firebase-realtime-database

我正在尝试将用户数据存储在Firebase数据库中。这是我处理onClick并将数据发送到数据库的代码:

public void onClickStore(final View view)
{
    String name = binding.getUser().name.get();
    String email = binding.getUser().email.get();

    DatabaseReference rootDb = FirebaseDatabase.getInstance().getReference();
    DatabaseReference usersDatabase = rootDb.child("Users");

    Map<String, JSONObject> userMap= new HashMap<>();
    JSONObject userObject = new JSONObject();

    try
    {
        userObject.put("Name", name);
        userObject.put("Email", email);
    }
    catch (JSONException e)
    {
        e.printStackTrace();
    }

    userMap.put("User_01", userObject);

    usersDatabase.setValue(userMap);

}

不幸的是,在尝试执行最后一行代码(将地图插入实时数据库)时,应用程序不断崩溃。有趣的是,当我对要插入的数据进行硬编码但不能使用userMapuserObject时,它可以正常工作。

这是Android Monitor错误的描述:

  

03-19 08:20:34.937 22378-22378 / com.example.jacek.simplyfootball   E / AndroidRuntime:致命异常:主要                                                                                     过程:com.example.jacek.simplyfootball,PID:22378                                                                                     com.google.firebase.database.DatabaseException:没有属性   在类org.json.JSONObject上找到的序列化                                                                                         在com.google.android.gms.internal.zzbqi $ zza。(未知来源)                                                                                         在com.google.android.gms.internal.zzbqi.zzi(未知来源)                                                                                         在com.google.android.gms.internal.zzbqi.zzax(未知来源)                                                                                         在com.google.android.gms.internal.zzbqi.zzax(未知来源)                                                                                         在com.google.android.gms.internal.zzbqi.zzaw(未知来源)                                                                                         在com.google.firebase.database.DatabaseReference.zza(未知来源)                                                                                         在com.google.firebase.database.DatabaseReference.setValue(未知   资源)                                                                                         在   com.example.jacek.simplyfootball.RegisterActivity.onClickStore(RegisterActivity.java:89)                                                                                         在   com.example.jacek.simplyfootball.databinding.ActivityRegisterBinding $ OnClickListenerImpl.onClick(ActivityRegisterBinding.java:290)                                                                                         在android.view.View.performClick(View.java:5198)                                                                                         在android.view.View $ PerformClick.run(View.java:21147)                                                                                         在android.os.Handler.handleCallback(Handler.java:739)                                                                                         在android.os.Handler.dispatchMessage(Handler.java:95)                                                                                         在android.os.Looper.loop(Looper.java:148)                                                                                         在android.app.ActivityThread.main(ActivityThread.java:5417)                                                                                         at java.lang.reflect.Method.invoke(Native Method)                                                                                         在   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)                                                                                         在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

非常感谢你的帮助。 谢谢

1 个答案:

答案 0 :(得分:1)

我不明白你真正想做的事情但是......

而不是

JSONObject userObject = new JSONObject();

您可以在用户

上创建模型
public class Usermodel {

    String Name,Email;

    public Usermodel(String name, String email) {
        Name = name;
        Email = email;
    }

    public Usermodel() {
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }
}

并创建新对象

Usermodel model = new Usermodel();
model.setname("");
model.setEmail("");

并提前编写代码

如果您需要,Firebase会创建它的主键

YourFirebaseRef.child("users").push().setValue(model);