java - 上传值时 FireBase 数据库异常

标签 java android firebase-realtime-database

在运行 logcat 时出现以下错误: E/AndroidRuntime:致命异常:main 进程:com.example.shikh.regie,PID:19366 com.google.firebase.database.DatabaseException:无法解析类为 com.example.shikh.regie.User 的节点 在 com.google.android.gms.internal.zzamm.zza(来源未知) 在 com.google.android.gms.internal.zzamm.zzbt(来源未知) 在 com.google.android.gms.internal.zzamp.zzbu(来源未知) 在 com.google.firebase.database.DatabaseReference.setValue(来源未知) 在 com.example.shikh.regie.MainActivity$1.onClick(MainActivity.java:40)

不知道问题出在哪里。为什么无法解析节点

MainActivity.java

public class MainActivity extends AppCompatActivity {
private EditText name,email,phone;
private Button btn;
private DatabaseReference mDatabse;
private String name1,email1,phone1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mDatabse = FirebaseDatabase.getInstance().getReference().child("AppUsers");

    name = (EditText) findViewById(R.id.editText);
    email = (EditText) findViewById(R.id.editText2);
    phone = (EditText) findViewById(R.id.editText3);

    name1 = name.getText().toString();
    email1 = email.getText().toString();
    phone1 = phone.getText().toString();
    btn = (Button) findViewById(R.id.button);
         btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Map<String, User> users = new HashMap<String, User>();
            DatabaseReference ref=mDatabse.child("AppUsers");
            mDatabse.setValue(email1,new User(name1,email1,phone1));
            mDatabse.setValue(users);
        }
    });

}
}

User.java

package com.example.shikh.regie;


public class User {
String name,email,phone;

public User(){}

public User(String name, String email, String phone) {
    this.name = name;
    this.email = email;
    this.phone = phone;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPhone() {
    return phone;
}

public void setPhone(String phone) {
    this.phone = phone;
}
 }

最佳答案

此代码将不起作用:

mDatabse.setValue(email1,new User(name1,email1,phone1));

唯一的[setValue()的匹配重载]( https://firebase.google.com/docs/reference/android/com/google/firebase/database/DatabaseReference.html#setValue(java.lang.Object , java.lang.Object)) 是:

public Task<Void> setValue (Object value, Object priority)

Set the data and priority to the given values.

在此重载中,第二个参数是优先级值,它必须是原始对象。

您似乎更有可能想做:

mDatabse.child("email1").setValue(new User(name1,email1,phone1));

这会将新用户设置为节点 email1在引用下。

关于java - 上传值时 FireBase 数据库异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40704859/

相关文章:

java - Android 复选框选中一个变量

android - @Produces 之后@Injects?

gridview - Flutter:如何将 Future 数据从 firebase 加载到 GridView?

javascript - 将新数据推送到 firebase 数据库时设置自定义数字键

swift - 从自动 ID 数据库子项中检索数据

java - 如何解决类/驱动程序并知道输出是什么

java - 如何在 Java Annotation 中设置字符串数组

java android错误将异常写入包裹

java - 如何在paintComponent中自动添加形状?

android - 我创建了一个包含两个 Activity 的 Android 应用程序,但无法从第二个 Activity 切换回第一个