2017-09-16 12 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クエリヘルプme

答えて

0

この問題を解決するには、final int[] ndomande = {14};配列の宣言をonDataChange() methodの中に移動します。そうでない場合は常にnullになります。

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から私の答えを見てください。