2016-07-24 4 views
-1

Я разрабатываю новое приложение в студии Android. Я сохранил свои данные с помощью setvalue в базе данных Firebase, в этом не было никаких проблем. Но, когда я пытаюсь получить данные из Firebase с добавлением addValueEventListener в корневую ссылку, как показано ниже, даже вызов OnDataChange() не вызван, а вызов onCancelled().Я могу сохранить данные в Firebase, но я не могу их получить

Я бы пропустил что-то, любые полезные предложения оценены.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_detail); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    mDatabase = FirebaseDatabase.getInstance().getReference(); 
    mDatabase.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      System.out.println(snapshot.getValue()); } 


      @Override 
     public void onCancelled(DatabaseError firebaseError) { 
     System.out.println("The read failed: " + firebaseError.getMessage());} 
     }); 

Мои сомнения при отладке моей программы либо контроль должен идти в OnDataChange() или onCancelled(). Но это не происходит. Я помещаю точку останова в синтаксисе System.out.println как в onDataChange(), так и в onCancelled() fm, но контроль там не останавливается.

ответ

-1

решаемых

Я попытался создать новый проект и сохранением и извлечение данных из базы данных Firebase работали без каких-либо проблем.

Тогда я понял, что проект, который я получаю, является тем, который я импортировал из старой консоли firebase.com. Я удалил приведенные ниже строки в градиенте построения уровня приложения, который устарел в соответствии с новой документацией Firebase, тогда он работал хорошо.

packagingOptions { 
    exclude 'META-INF/LICENSE' 
    exclude 'META-INF/LICENSE-FIREBASE.txt' 
    exclude 'META-INF/NOTICE' 
    } 

Надеюсь, это будет полезно для других.

0

Вы читали документы?

Важно: Метод OnDataChange() вызывается каждый раз, когда данные изменены в указанной ссылке базы данных, в том числе изменения в детей. Чтобы ограничить размер ваших снимков, прикрепите только на уровне , который необходим для просмотра изменений. Например, с добавлением прослушивателя в корень вашей базы данных не рекомендуется.

https://firebase.google.com/docs/database/android/retrieve-data

Я думаю, что причиной выпуска

Все остальное смотрит отлично, за исключением System.out, я не уверен, что он будет работать, андроид имеет собственный инструмент регистрации. Попробуйте Log.e

+0

Хотя обычно не рекомендуется прикреплять слушателей к корню, это не приведет к игнорированию обратного вызова. –

0

Попробуйте

mDatabase.child("your table name here").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      System.out.println(snapshot.getValue()); } 


      @Override 
     public void onCancelled(DatabaseError firebaseError) { 
     System.out.println("The read failed: " + firebaseError.getMessage());} 
     }); 
+0

Я попытался добавить addValueEventListener на разных уровнях ребенка, но все же он не работает. –

+0

Я сомневаюсь, что при отладке моей программы либо элемент управления должен войти в onDataChange(), либо onCancelled(). Но это не происходит. Я помещаю точку останова в синтаксисе System.out.println как в onDataChange(), так и в onCancelled() fm, но контроль там не останавливается. –

+0

@RafiMdk Пожалуйста, у вас есть данные в базе данных Firebase. Я работал несколько раз, и он отлично работает –

0

Попробуйте это. Дайте мне знать, если это SucceS

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_detail); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    mDatabase = FirebaseDatabase.getInstance().getReference(); 
    mDatabase.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      System.out.println(dataSnapshot.getValue().toString()); } 


      @Override 
     public void onCancelled(DatabaseError firebaseError) { 
     System.out.println("The read failed: " + firebaseError.getMessage());} 
     }); 
Смежные вопросы