2016-10-04 81 views
1

爲了避免這種情況發生,是的,在這個問題上有類似的問題,但它並不能完全解釋我的情況要求我的想法。Android Firebase:如何簡單獲取某個鍵下的所有值?

在火力地堡實時數據庫,我有一個JSON樹看起來是這樣的:

users{ 
    userid{ 
     templates{ 
      templateName1{ // example name that the user saves their template as. 
          // each template is an ArrayList 
        //templateName1 ArrayList contents 
      } 
      templateName2{ 
        //templateName1 ArrayList contents 
      } 
      templateName2{ 
        //templateName1 ArrayList contents 
      } 
     } 
    } 
} 

我需要能夠列出每個模板中的「模板」,並在其他時間只需獲得的ArrayList特定模板的值。但我似乎無法弄清楚如何做這個簡單的事情。

從我GOOGLE了/在文檔閱讀,我的代碼應該是這個樣子:

DatabaseReference mTemplateRef = mDatabase.child("users").child(uid).child("templates"); 

    mTemplateRef.addListenerForSingleValueEvent(
      new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        dataSnapshot.getChildren(); 

        // somehow get the values here 

       } 
    }); 

當我調試,並輸入表達式數據dataSnapshot.getChildren()我可以看到的內容如預期的那樣,但我似乎無法將這些數據輸入到我的應用程序中。有任何想法嗎?

回答

1

這就是我要找的東西:

settingsRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){ 
       // easy 
       String value = dataSnapshot1.getValue(String.class);      
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
0

像這樣的代碼:

mTemplateRef.addListenerForSingleValueEvent(
      new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
       // dataSnapshot itself a child of "templates" 
     DataSnapshot messageSnapshot= dataSnapshot; 
        DataType author =   (DataType)messageSnapshot.child("array").getValue(); 

        // somehow get the values here 

       } 
    }); 
1

它建議你用干將,空和參數化的構造函數模板創建一個類如

public class Template { 

    String name; 
    ArrayList<String> list; 

    public Template() { 
    } 

    public Template(String name, ArrayList<String> list) { 
     this.name = name; 
     this.list = list; 
    } 

    public String getName() { 
     return name; 
    } 

    public ArrayList<String> getList() { 
     return list; 
    } 
} 

現在你可以很容易地做到這一點

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for(DataSnapshot data : dataSnapshot.getChildren()){ 

       Template template = data.getValue(Template.class); 
       // use this object and store it into an ArrayList<Template> to use it further 

      } 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+0

嗯,我仍然有問題。這將如何讓我列出關鍵「模板」下的所有ArrayLists?也許有每個迭代添加到單獨的ArrayList?這是如何將ArrayList設置爲模板類的?我也遇到了這個錯誤:com.google.firebase.database.DatabaseException:無法將類型爲java.util.ArrayList的對象轉換爲com.app.template_editor.template – theRealOne

+0

我要離開以前的評論如果你看到任何明顯的東西,但我認爲我知道該怎麼做,直到放學後才能測試它。我會更新,如果它出來 – theRealOne

+0

所以,現在我做了你說的,但我得到一個錯誤,我「不能轉換類型ArrayList的對象類型模板」與模板是您提供的類。 – theRealOne

相關問題