2017-09-16 50 views
-3
final int[] ndomande = {14}; 

//Database 
mFirebaseInstance = FirebaseDatabase.getInstance(); 

final DatabaseReference Refndom = mFirebaseInstance.getReference("Dati"); 
final Query queryn = Refndom.orderByChild("numero_domande"); 

queryn.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     //Toast.makeText(PlayTest.this, "FIN QUI ",Toast.LENGTH_SHORT).show(); 

     for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()) { 
      // Toast.makeText(PlayTest.this, "QUI ",Toast.LENGTH_SHORT).show(); 

      long numero_domande = (long) messageSnapshot.getValue(); 
      ndomande[0] = (int) numero_domande; 

      Toast.makeText(PlayTest.this, "quante domande ci sono totali: "+ numero_domande,Toast.LENGTH_SHORT).show(); 
     } 

    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Toast.makeText(PlayTest.this, "???", Toast.LENGTH_SHORT).show(); 
    } 
}); 

//PROBLEM ON NDOMANDE 

Toast.makeText(PlayTest.this, "x: "+ ndomande[0] ,Toast.LENGTH_SHORT).show(); 
Random random = new Random(); 
final int x = random.nextInt(ndomande[0]); 
Toast.makeText(PlayTest.this, "x: "+ndomande[0] ,Toast.LENGTH_SHORT).show(); 

数组不返回查询的值,但我为初始化设置的值将帮助我做一个异步阻塞查询某人可以帮助我?Firebase查询帮助我

回答

0

要解决此问题,请将final int[] ndomande = {14};数组的声明移至onDataChange() method之内,否则它将始终为空。

public void onDataChange(DataSnapshot dataSnapshot) { 
    //Toast.makeText(PlayTest.this, "FIN QUI ",Toast.LENGTH_SHORT).show(); 
    final int[] ndomande = {14}; 

    for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()) { 
     //Toast.makeText(PlayTest.this, "QUI ",Toast.LENGTH_SHORT).show(); 

     long numero_domande = (long) messageSnapshot.getValue(); 
     ndomande[0] = (int) numero_domande; 

     Toast.makeText(PlayTest.this, "quante domande ci sono totali: "+ numero_domande,Toast.LENGTH_SHORT).show(); 
    } 
} 

这是由于的onDataChange() method异步行为,甚至你想从数组值之前调用发生。在方法中移动声明并在其中使用它可以解决您的问题。

如果你想使用该方法以外的数组的值,请看看这篇文章的答案How To Get Async Value Outside onDataChange() Method