2017-04-05 56 views
0

我遇到問題。該表etd包含Etudiant類型的對象,但我不能出聽者的這些對象返回:從Firebase中的valueEventListener返回值

ValueEventListener valueEventListener = mref.addValueEventListener(new ValueEventListener() { 
    Etudiant etud = new Etudiant(); 

    public Etudiant getEtud() { 
     return etud; 
    } 

    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     int i = 0; 
     Groupe groupe = new Groupe(); 
     Object[] objTab = new Object[100]; 
     // Toast.makeText(MainActivity.this,String.valueOf(tabdesobjet(objTab,Groupe.class,dataSnapshot,i)),Toast.LENGTH_LONG).show(); 
     int j = 0; 
     for (DataSnapshot map: dataSnapshot.getChildren()) { 
      if (!map.getKey().equals("id") && !map.getKey().equals("idCycle") && !map.getKey().equals("idFilliere") && !map.getKey().equals("idPromo") && !map.getKey().equals("idSection") && !map.getKey().equals("nbEtudiants") && !map.getKey().equals("designation")) { 
       objTab[i] = map.getValue(); 
       i++; 
      } 

     } 
     Etudiant[] etd = new Etudiant[i]; 
     for (j = 0; j < i; j++) { 
      HashMap < String, Object > hashMap = (HashMap < String, Object >) objTab[j]; 
      etd[j] = new Etudiant(); 
      etd[j].setAttributs(hashMap); 
     } 
     Log.v("Test", "Etudiant = " + etd[0].getNom()); 
     etud = etd[0]; 
    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 
+0

請告訴我們你的意思是你所不能返回的對象了聽者。你是否收到彙編問題?或運行時問題? – Rob

+0

數據是從Firebase數據庫異步加載的。當你試圖返回一個值時,'onDataChange'中的代碼還沒有運行。而不是試圖返回一個值,將代碼*使用*值*轉換爲*'onDataChange'。請參閱http://stackoverflow.com/questions/41372562/returning-a-value-in-firebase-ondatachange –

+0

謝謝,但我的程序太大,它是一個真正的應用程序,我被封鎖,幫助我。 – hichem

回答

0

第一是easyer使用集合像List<Etudiant>ArrayList<Etudiant>,第二我沒有得到你想要做什麼正是

+0

我去獲取數據並在我的程序中使用它。 – hichem

0

你可以使用這樣的事情

ArrayList<Etudiant> etudiantList = new ArrayList<>(); 

void getEtudiantList() { 
    mref.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
       etudiantList.add(snapshot.getKey()); 
      }    
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
}