Arriylist of String не создается в базе данных - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь создать нового пользователя в Firebase, имеющем 4 поля: 1.username 2.posts 3.followers 4.following -> ArrayList

, где следующим является ArrayList, нопоследнее поле вообще не создается в Firebase.

Вот результат, который я получаю: result

Код для создания нового пользователя:

UserBean userBean = new UserBean(mUsername.toLowerCase(),0,0,new ArrayList<String>());
mUserDatabase.push().setValue(userBean);

My UserBean:

String username;
int followers,post;
ArrayList<String> following;

public UserBean() {}

public UserBean(String username, int followers, int post, ArrayList<String> following) {
    this.username = username;
    this.followers = followers;
    this.post = post;
    this.following = following;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public int getFollowers() {
    return followers;
}

public void setFollowers(int followers) {
    this.followers = followers;
}

public int getPost() {
    return post;
}

public void setPost(int post) {
    this.post = post;
}

public ArrayList<String> getFollowing() {
    return following;
}

public void setFollowing(ArrayList<String> following) {
    this.following = following;
}

Я также пытался добавить данные в ArrayList в любом случае, но данные не добавляются в Firebase.Вот что я попробовал:

 Query currentUserQuery = mUsersReference.orderByChild("username").equalTo(mFirebaseAuth.getCurrentUser().getDisplayName().toLowerCase());
 Log.d(MainActivity.TAG,mFirebaseAuth.getCurrentUser().getDisplayName().toLowerCase());


currentUserQuery.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for(DataSnapshot data: dataSnapshot.getChildren()){
                                ArrayList<String> following = (ArrayList<String>) data.child("following").getValue();
                                following.add(username);
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

ArrayList<String> following = (ArrayList<String>) data.child("following").getValue(); Эта строка кода выдает NullPointerException, но она должна была добавить данные в список, поскольку вы, ребята, говорите, что список просто не отображаетсябез каких-либо данных.Тогда почему он выбрасывает NullPointerException?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Так что, очевидно, @Vinay Avasthi прав, Firebase не показывает пустой ArrayList в базе данных, поэтому, если вы инициализируете свой объект и передаете пустой ArrayList в свой конструктор, то ArrayList не будетпоказать в Firebase, что еще больше дает вам еще одну проблему;В будущем, если вы хотите добавить данные в список, вы не сможете сделать это, так как это дает вам NullPointerException, поэтому для решения всех этих проблем мне нужно было передать ArrayList с пустым String, а затемя мог бы показать, что List в firebase и легко сослаться на него.

ArrayList<String> following = new ArrayList<>();
following.add("");
UserBean userBean = new UserBean(mUsername.toLowerCase(),0,0,following);
mUserDatabase.push().setValue(userBean);

Еще одна важная вещь, на которую следует обратить внимание, также отмеченная @Vinay Avasthi, заключается в том, что вы также должны установить значениеснова перечислите в свой новый список, иначе вы бы добавили данные в список, но данные не будут обновляться в Firebase.

ArrayList<String> following = (ArrayList<String>) data.child("following").getValue();
following.add(username);
String key = data.getKey();                   
mUsersReference.child(key).child("following").setValue(following);

Но есть еще одна проблема, с которой я сталкиваюсь,что в каждом списке у вас будет пустой String, который вам не нужен.

enter image description here

На данный момент я просто проигнорирую пустойString показывая пользователям их followings.Но я думаю, firebase должен был создать пустое ArrayList.

0 голосов
/ 12 февраля 2019

Как я понимаю, firebase не создает элементы массива, если в нем нет элементов.Если вы добавите элемент в список, вы увидите его в firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...