addValueEventListener (новый ValueEventListener () не читает данные - PullRequest
0 голосов
/ 03 июля 2019

В моем коде ниже функция setPhoto (url) всегда получает нулевой URL-адрес, но если я вызываю другую функцию, нажимая кнопку, и для этого требуется URL-адрес, она правильно получает данные.

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_perfil);


    reference = mDatabaseAPI.getUserReferenceByUid(user.getUid()).child(PHOTO_URL);
    reference.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            url = dataSnapshot.getValue(String.class);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(Perfil.this, "La lectura de la foto falló", Toast.LENGTH_LONG).show();
        }
    });
    setPhoto(url);

}

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Вы инициализируете экземпляр url где-нибудь еще, кроме этого:

    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        url = dataSnapshot.getValue(String.class);
    }

Если нет, то каково значение url при вызове функции setPhoto (url)?Это будет то, с чем вы инициализировали URL в этом упражнении.Если вы инициализировали с нулем, оно будет нулевым.Почему бы вам не переместить setPhoto (url) внутри метода onDataChange (..) сразу после оператора

url = dataSnapshot.getValue(String.class);

Таким образом, вы можете быть уверены, что url имеет значение.Причиной инициализации URL при нажатии кнопки, скорее всего, является то, что ValueEventListener вызывается с вызываемым методом onDataChange (...).Вот почему вы получаете значение url правильно при нажатии кнопки.Надеюсь, это прояснит ситуацию.

0 голосов
/ 03 июля 2019

Вы совершаете вызов асинхронно.Вам нужно переместить setPhoto(url) на onDataChange(), сразу после того, как вы делаете назначение на url:

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    url = dataSnapshot.getValue(String.class);
    setPhoto(url);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...