在运行 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/