Cloud Firestore не распознает изменения имени поля - PullRequest
0 голосов
/ 17 ноября 2018

Я пишу одновременно и в мою базу данных Firebase Realtime, и в облачное хранилище пожаров.

Первоначально у меня было поле с именами POJO "user_id". Недавно я изменил на «creator_id» в моем POJO, и когда я записываю POJO с измененным полем в базу данных, он появляется как «creator_id». Тем не менее, он все еще записывается в Firestore как «user_id». Не уверен, есть ли проблема с моим кодом:

mBaseRef.updateChildren(childUpdates);
            Collections.reverse(mPollAnswers);
            for (int i = 0; i < mPollAnswers.size(); i++) {
                mBaseRef.child("Polls").child(key).child("answers").child(String.valueOf(i + 1)).updateChildren(poll.answerConvert(mPollAnswers, i));
            }

            String userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
            Log.v("USER_ID", userID);
            mUserRef.child(userID).updateChildren(childUpdates);


            mStoreBaseRef.collection(POLLS).add(poll).addOnCompleteListener(new OnCompleteListener<DocumentReference>() {
                @Override
                public void onComplete(@NonNull Task<DocumentReference> task) {
                    if (task.isSuccessful()) {
                        DocumentReference docRef = task.getResult();
                        String key = docRef.getId();
                        Log.v("KEY", key);
                        Toast.makeText(getApplicationContext(), key, Toast.LENGTH_LONG).show();
                        CollectionReference pollAnswerRef = mStoreBaseRef.collection("Polls").document(key).collection("answers");
                        //TODO: need to add answers
                        for (int i = 0; i < mPollAnswers.size(); i++){
                            pollAnswerRef.document(String.valueOf(i + 1)).set((poll.answerConvert(mPollAnswers, i)), SetOptions.merge());
                        }

                    }
                }

                });

POJO:

@IgnoreExtraProperties
public class Poll {

private String question;
private String image_URL;
private String creator_ID;
private String display_name;
private int vote_count;
private Long epoch;
private long trend_score;

@ServerTimestamp
private Date date;

private ArrayList<String> answers;

public Poll() {
}

public Poll(String Question, String Image_URL, ArrayList<String> answers, int vote_count, String creator_ID, String DisplayName, Long epoch, long trend_score) {
    this.question = Question;
    this.image_URL = Image_URL;
    this.answers = answers;
    this.vote_count = vote_count;
    this.creator_ID = creator_ID;
    this.display_name = DisplayName;
    this.epoch = epoch;
    this.trend_score = trend_score;
    this.date = date;
}

public String getUser_id() {
    return creator_ID;
}

public String getDisplay_name() {
    return display_name;
}

public String getQuestion() {
    return question;
}

public void setQuestion(String question) {
    this.question = question;
}

public String getImage_URL() {
    return image_URL;
}

public Long getEpoch() {
    return epoch;
}

public void setEpoch(Long epoch) {
    this.epoch = epoch;
}

public void setUser_id(String user_id) {
    this.creator_ID = user_id;
}

public void setDisplay_name(String display_name) {
    this.display_name = display_name;
}

public void setImage_URL(String image_URL) {
    this.image_URL = image_URL;
}

public Integer getVote_count() {
    return vote_count;
}

public void setVote_count(Integer vote_count) {
    this.vote_count = vote_count;
}

public long getTrend_score() {
    return trend_score;
}

public void setTrend_score(long trend_score) {
    this.trend_score = trend_score;
}

@Exclude
public Map<String, Object> toMap() {
    HashMap<String, Object> result = new HashMap<>();
    result.put("question", question);
    result.put("image_URL", image_URL);
    result.put("vote_count", 0);
    result.put("creator_ID", creator_ID);
    result.put("display_name", display_name);
    result.put("epoch", epoch);
    result.put("trend_score", trend_score);
    return result;
}

@Exclude
public Map<String, Object> answerConvert(ArrayList<String> answers, int index){
        HashMap<String, Object> result = new HashMap<>();
        result.put("answer", answers.get(index));
        result.put("vote_count", 0);
   }

}

1 Ответ

0 голосов
/ 17 ноября 2018

По спецификации JavaBeans имя получателя используется в качестве основы для имени производного поля / свойства, когда базовый член является закрытым.Итак, это:

private String creator_ID;

public String getUser_id() {
    return creator_ID;
}

На самом деле говорит системе, что вы хотите прочитать, и напишите поле с именем user_id, а не creator_ID.Вы должны изменить имена получателей и установщиков, чтобы они соответствовали тому, что вы хотите, чтобы имя поля было в базе данных.

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