用于数据检索的空屏幕

时间:2017-03-05 12:59:11

标签: android firebase firebase-realtime-database

我正在尝试从firebase检索数据到listview ...但是此代码返回一个空白屏幕。我的数据库有一个子节点 Dog Expenditure ,带有两个节点在它上面

  • 金额
  • 项目

我已经尝试了所有我知道的方法我只是得到一个空屏幕。有人请帮帮我

我看到的只是一个空屏幕。

我不知道如何解决这个问题:

代码在这里

package com.example.moses.farm;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.ArrayList;

public class Mystatement extends AppCompatActivity {
    DatabaseReference dref;
    ListView listView;
    ArrayList<String> list=new ArrayList<>();
    ArrayAdapter<String> adapter;

    @Override
    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").child("amount").child("item");
        dref.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                String value = dataSnapshot.getValue(String.class);

                list.add(value);
                adapter.notifyDataSetChanged();
            }

            @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) {


            }
        });
    }
}

我的活动如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_mystatement"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.moses.farm.Mystatement">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listview"/>
</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

你说你有一个节点“Dog Expenditure”,里面有两个节点(金额和项目)。

执行dref= dref.child("Dog Expenditure").child("amount").child("item");时 您正在尝试在Dog Expenditure节点内的amount节点内找到一个项目节点。如果您要同时获得金额和子金额,您应该只使用dref.child("Dog Expenditure")并从数据快照值中获取金额和项目。

修改

如果你要做的只是加载数据库中的所有狗支出,你可以使用它。

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

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });