我正在尝试从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>
答案 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) {
}
});