2016-11-20 6 views
0

Получили эти ошибки в Run LogCat: E/AndroidRuntime: неустранимый: Основной процесс: com.example.shikh.regie, ПИД: 19366 com.google.firebase.database.DatabaseException: Не удалось проанализировать узел с классом класса com.example.shikh.regie.User по адресу com.google.android.gms.internal.zzamm.zza (Неизвестный источник) at com.google.android.gms.internal.zzamm.zzbt (Неизвестный источник) at com.google.android.gms.internal.zzamp.zzbu (Неизвестный источник) at com.google.firebase.database.DatabaseReference.setValue (Неизвестный источник) at com.example.shikh.regie. MainActivity $ 1.onClick (MainActivity.java:40)FireBase базы данных Исключение при загрузке значения

Dont знаю Будет problem.why он не в состоянии разобрать узел

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; 
} 
} 
+0

Возможный дубликат [com.firebase.client.FirebaseException: не удалось разбора узла с классом класса CLASS \ _NAME android] (http://stackoverflow.com/questions/34538330/com-firebase-client-firebaseexception-fail- to-parse-node-with-class-class-cla) – PsyGik

+0

@PsyGik связанный с вами вопрос вызвал 'updateValues ​​()', который этого вопроса нет. Поэтому, хотя сообщение об ошибке одинаково для обоих, я сомневаюсь, что это та же причина. –

+0

Нет Duplicate class @PsyGik –

ответ

1

Этот код будет не работает:

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)

Установите данные и приоритет для заданных значений.

В этой перегрузке второй аргумент является значением приоритета, которое должно быть примитивным объектом.

кажется более вероятным, что вы хотите сделать:

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

Это установит новый пользователь в качестве узла email1 по ссылке.

+0

Я хочу, чтобы родительский узел был назван в качестве электронной почты пользователя ... каждый пользователь будет иметь свою собственную запись под своим родительским узлом по электронной почте –

+0

Для этого вы должны указать адрес электронной почты вместо 'email1 'в приведенном выше фрагменте. Просто не забудьте закодировать электронное письмо, так как '.' не разрешено в ключах Firebase. Обычный способ - заменить '.' На ','. –

+0

Примечание: адреса электронной почты могут содержать много символов, которые не разрешены в ключе firebase. Кроме того, использование электронной почты в качестве ключа не позволяет пользователям изменять свой адрес электронной почты. Чтобы решить, как я храню пользователей, используя UUID. В начале моего приложения я просто загружаю всех пользователей в память в хэш-карту по электронной почте. – bluevoid