2017-03-06 75 views
1

嗨,大家好,我正在尝试在我的应用中将firebase值检索到列表视图中。然而,我已经有这个问题超过两个星期了,我已经注意到了一些非常奇怪的事情..我有这样的数据库结构my database structure。然而,当我运行下面的代码,在我的应用程序中,我看到一个空白页面,但在我的android studio控制台中,我看到一个System.out:dsdstytytyty这是该结构上的最后一个值..并标记你我添加了这些值手动只是出于好奇。现在的问题是在android中打印出列表视图中的firebase数据

  1. 为什么我的代码只检测最后两个值金额和项目
  2. 为什么它打印出来在Android Studio控制台,而不是在我的应用程序。
  3. 确实有一个独特的标识符,它的作用类似于Dog支出小孩的标题,在此扮演角色?
下面

是我检索值代码..

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_mystatement); 
     listview = (ListView) findViewById(R.id.listview); 
     adapter=new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,list); 
     listview.setAdapter(adapter); 
     dref= FirebaseDatabase.getInstance().getReference(); 
     dref= dref.child("Dog Expenditure"); 

     dref.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for(DataSnapshot child : dataSnapshot.getChildren()) { 
HashMap<String, String> value = (HashMap<String, String>) child.getValue(); 
        String amount = child.get("amount").toString(); 
        String item = value.get("item").toString(); 
        // This will print out amount and item 
        System.out.println(amount + item); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
     } 

而且有趣的是,即使我尝试做一个**的System.out.println(“测试信件,看看它会输出在我的应用程序“); **没有任何反应只是一个空白页.. 真的停留在这一段时间现在它很糟糕...

回答

0

添加addChildEvent监听器。

尝试,

dref.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

      String a = (String) dataSnapshot.getValue() 
      System.out.println(a); 

    } 

    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onChildRemoved(DataSnapshot dataSnapshot) { 

    } 

    @Override 
    public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

希望这有助于。

0
  1. 我可以猜测它的发生是因为里面还有其他的点,并且只有两个参数(2个字符串)。请参阅..
  2. 尝试使用断点进行调试。看看dataSnapshot里面有什么。它会帮助你理解如何处理它。

要想从内部节点的值,你需要去每个节点像这样dataSnapshot.child。(“ - KeyM5446414564”)的getValue

-1
final ArrayAdapter<String> adapter = new ArrayAdapter<>(
    this, 
    android.R.layout.simple_list_item_1, 
    android.R.id.text1 
); 
+3

欢迎来到StackOverflow! 请解释上面的代码片段的功能,可能有适当的文档,以及它如何帮助解决问题。 –

+1

+1 @TimVisée:我也有同感。 Almustapha:请提供清晰的描述。不要盲目地分享链接/代码,对你分享的链接/代码给予解释/一瞥,以便其他人也可以理解,并且这将有所帮助 –

+0

同样,所有这些代码都是创建一个简单的'ArrayAdapter'为一个ListView。这个答案根本没有解决这个问题。 –