2016-12-08 4 views
-1

Я создал приложение для входа и использую базу данных firebase. Но у меня есть проблема, когда я пытаюсь сохранить объект в базе данных. Хотя, когда я пытаюсь сохранить простую строку или просто HashMap объект все работает.android save object in firebase

я получил ошибку:

com.google.firebase.database.DatabaseException: Found a conflicting setters with name: setWallpaper (conflicts with setWallpaper defined on android.content.ContextWrapper)

Вот мой код:

Основная деятельность:

public class MainActivity extends AppCompatActivity { 
    EditText userName; 
    EditText password; 
    Button signInbtn; 
    DatabaseReference url; 
    Map<String, User> users = new HashMap<String, User>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     url = database.getInstance().getReference(); 
     userName = (EditText) findViewById(R.id.userName); 
     password = (EditText) findViewById(R.id.password); 
     signInbtn = (Button) findViewById(R.id.signInBtn); 
     signInbtn.setOnClickListener(signObject); 

    } 
    View.OnClickListener signObject = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      User user = new User("Moshe","1234"); 
      users.put("101",user); 
      DatabaseReference userUrl = url.child("Users"); 
      userUrl.setValue(users); 
      System.out.println(users); 
     } 
    }; 

Класс пользователя:

public class User extends Application { 

    public static String password; 
    public static String name ; 

    public User(){ 

    } 

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

    public String getName() { 
     return name; 
    } 

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

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     User.password = password; 
    } 
} 

Я добавил permmision.Internet к манифесту. Я много читал об этой теме и особенно о Firebase, но я не нашел решения для своей проблемы.

ответ

1

Firebase может считывать и записывать только базовые объекты Java (так называемые простые старые объекты Java или POJO) в базу данных. Расширяя класс User от Application, вы нарушаете эти правила.

Решения сделать ваш User класс полностью автономным:

public class User { 
    ... 
+0

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

+0

Это может быть по многим причинам и действительно был бы другой вопрос. Тем не менее: я начну с прослушивания проблем безопасности в 'setValue()'. См. Http://stackoverflow.com/documentation/firebase/5548/how-do-i-listen-for-errors-when-accessing-the-database/19721/detect-errors-when-writing-a-value-on -android # т = +201612090709222522846 –