2016-07-31 3 views
2

Я использую firebase в качестве бэкэнд-сервиса. Я вставляю данные в свою базу данных firebase и проверяю, успешна ли вставка или нет со следующим кодом, но всегда возвращает false.Firebase isSuccessful() всегда возвращает false

boolean issucessfull = ref.child("universities").setValue(university).isSuccessful(); 

      if (issucessfull) { 
       Toast.makeText(UniversityActivity.this, "added to database successfully", Toast.LENGTH_SHORT).show(); 
       clearViews(); 
       enableViews(true); 
      } else { 
       Toast.makeText(UniversityActivity.this, "Some error occured, try again", Toast.LENGTH_SHORT).show(); 
       enableViews(true); 
      } 

Что может быть причиной? Я отлаживал его, данные были добавлены в firebase, но он все равно всегда был ложным. Любая помощь была бы оценена.

ответ

7

Это потому, что Task еще не завершен, добавьте CompletionListener вместо этого в качестве второго параметра setValue.

ref.child("universities").setValue(university, new DatabaseReference.CompletionListener() { 
    @Override 
    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { 
     if (databaseError != null) { 
      Toast.makeText(UniversityActivity.this, "Some error occured, try again", Toast.LENGTH_SHORT).show(); 
      enableViews(true); 
     } else { 
      Toast.makeText(UniversityActivity.this, "added to database successfully", Toast.LENGTH_SHORT).show(); 
      clearViews(); 
      enableViews(true); 
     } 
    } 
}); 

Приведенный выше код является рекомендуемым способом, альтернатива

Task<Void> task = new FireDatabaseRole().ref.setValue(university); 
task.addOnCompleteListener(new OnCompleteListener<Void>() { 
    @Override 
    public void onComplete(@NonNull Task<Void> task) { 
     if (task.isSuccessful()) { 
      // success 
     } else { 
      // error 
     } 
    } 
}); 
Смежные вопросы