Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中使用firebase数据填充ListView_Android_Firebase_Firebase Realtime Database_Firebaseui - Fatal编程技术网

在android中使用firebase数据填充ListView

在android中使用firebase数据填充ListView,android,firebase,firebase-realtime-database,firebaseui,Android,Firebase,Firebase Realtime Database,Firebaseui,我又回到这个问题上来了,虽然我很接近:我有下面的代码,我试图在列表视图中显示firebase值 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mystatement); listview = (ListView) findViewById(R.id.li

我又回到这个问题上来了,虽然我很接近:我有下面的代码,我试图在列表视图中显示firebase值

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


        DatabaseReference dref = FirebaseDatabase.getInstance().getReference();
        dref= dref.child("Expenditure");

        dref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                    //Getting the data from snapshot
                    DogExpenditure dogExpenditure = postSnapshot.getValue(DogExpenditure.class);

                    //Adding it to a string
                    String expenses = "Amount: "+dogExpenditure.getAmount()+"\nReason for Use: "+dogExpenditure.getItem()+"\n\n";

                    String amount = dogExpenditure.getAmount();
                    String item = dogExpenditure.getItem();

                    System.out.println(expenses);


                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }


            public void onCancelled(FirebaseError firebaseError) {
                System.out.println("The read failed: " + firebaseError.getMessage());
            }
        });

有人能告诉我如何在我的应用程序中显示该输出吗,因为目前它没有显示任何内容,但在调试控制台中我可以看到它

生成dref的单例对象


列表尚未初始化。

您应该将您的费用添加到列表中,并使用
adapter.notifyDataSetChanged()

列表.添加(费用)

adapter.notifyDataSetChanged()

//就在onCreate上面
List expenseList=new ArrayList();
阵列适配器;
//值内事件侦听器
expenseList.add(费用)
if(expensList.size()=1)
{
adapter=newarrayadapter(getApplicationContext(),android.R.layout.simple\u list\u item\u 1,expensList);
setAdapter(适配器)
}
else if(expenseList.size()>1)
{
adapter.notifyDatasetChanged();
}
您可以使用

用firebase数据填充listView非常简单

只需添加依赖项即可:

  • 连接到Firebase
  • 创建自定义FirebaseListAdapter子类
  • 比如:

      listview = (ListView) findViewById(R.id.listview);
        DatabaseReference dref = FirebaseDatabase.getInstance().getReference();
        mAdapter = new FirebaseListAdapter<DogExpenditure>(this, DogExpenditure.class, R.layout.yourLayout, ref) {
                @Override
                protected void populateView(View view, DogExpenditure myObj, int position) {
                   //populate your view
                   String amount = dogExpenditure.getAmount()
                   //Put the value in your layout.
                }
            };
    listview.setAdapter(mAdapter);
    
    listview=(listview)findViewById(R.id.listview);
    DatabaseReference dref=FirebaseDatabase.getInstance().getReference();
    mAdapter=新的FirebaseListAdapter(this,dogExpression.class,R.layout.yourLayout,ref){
    @凌驾
    受保护的void populateView(视图视图、dogbj、int位置){
    //填充您的视图
    字符串金额=支出。getAmount()
    //将值放入布局中。
    }
    };
    setAdapter(mAdapter);
    

    更多信息。

    首先创建一个适配器,因为您已经拥有model类。 MyAdapter.java

     public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    
    private Context context;
    private List<DogExpenditure> uploads;
    
    public MyAdapter(Context context, List<DogExpenditure> uploads) {
        this.uploads = uploads;
        this.context = context;
    }
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.layout_firebase_images, parent, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }
    
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        DogExpenditure upload = uploads.get(position);
    
        holder.textViewName.setText(upload.getAmount());
        holder.textView1.setText(upload.getYourData());
    
    }
    
    @Override
    public int getItemCount() {
    
        return uploads.size();
    }
    
    class ViewHolder extends RecyclerView.ViewHolder {
    
        public TextView textViewName;
        public ImageView imageView;
    
        public ViewHolder(View itemView) {
            super(itemView);
    
            textViewName = (TextView) itemView.findViewById(R.id.textViewName);
            textview1 = (TextView) itemView.findViewById(R.id.your_id);
        }
    }
     }
    
    公共类MyAdapter扩展了RecyclerView.Adapter{ 私人语境; 私人名单上传; 公共MyAdapter(上下文、列表上载){ this.uploads=上传; this.context=上下文; } @凌驾 public ViewHolder onCreateViewHolder(视图组父级,int-viewType){ 视图v=LayoutInflater.from(parent.getContext()) .充气(R.layout.layout\u firebase\u图像,父级,假); 视窗夹持器视窗夹持器=新视窗夹持器(v); 返回视图持有者; } @凌驾 公共无效onBindViewHolder(ViewHolder,int位置){ 上传=上传。获取(位置); holder.textViewName.setText(upload.getAmount()); holder.textView1.setText(upload.getYourData()); } @凌驾 public int getItemCount(){ 返回uploads.size(); } 类ViewHolder扩展了RecyclerView.ViewHolder{ 公共文本视图文本视图名称; 公共影像视图; 公共视图持有者(视图项视图){ 超级(项目视图); textViewName=(TextView)itemView.findViewById(R.id.textViewName); textview1=(TextView)itemView.findViewById(R.id.your_id); } } } 现在进入你的活动

    private List<DogExpenditure> uploads;
    MyAdapter adapter;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mystatement);
        listview = (ListView) findViewById(R.id.listview);
        textView4 = (TextView) findViewById(R.id.textView4);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, list);
        listview.setAdapter(adapter);
        dref = FirebaseDatabase.getInstance().getReference();
        uploads = new ArrayList<>();
    
        DatabaseReference dref = FirebaseDatabase.getInstance().getReference();
        dref= dref.child("Expenditure");
    
        dref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                    //Getting the data from snapshot
                    DogExpenditure dogExpenditure = postSnapshot.getValue(DogExpenditure.class);
                    uploads.add(dogExpenditure);
                }
                adapter = new MyAdapter(getApplicationContext(), uploads);
                recyclerView.setAdapter(adapter);
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
    
    
            public void onCancelled(FirebaseError firebaseError) {
                System.out.println("The read failed: " + firebaseError.getMessage());
            }
        });
    
    私有列表上传;
    MyAdapter适配器;
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity\u mystatement);
    listview=(listview)findViewById(R.id.listview);
    textView4=(TextView)findViewById(R.id.textView4);
    adapter=new ArrayAdapter(这是android.R.layout.simple\u下拉列表\u项\u 1行,列表);
    setAdapter(适配器);
    dref=FirebaseDatabase.getInstance().getReference();
    uploads=新建ArrayList();
    DatabaseReference dref=FirebaseDatabase.getInstance().getReference();
    dref=dref.儿童(“支出”);
    dref.addValueEventListener(新的ValueEventListener(){
    @凌驾
    公共无效onDataChange(数据快照快照){
    对于(DataSnapshot postSnapshot:snapshot.getChildren()){
    //从快照获取数据
    DogExpression dogExpression=postSnapshot.getValue(dogExpression.class);
    上传。添加(DogExpense);
    }
    adapter=新的MyAdapter(getApplicationContext(),上载);
    recyclerView.setAdapter(适配器);
    }
    @凌驾
    已取消的公共void(DatabaseError DatabaseError){
    }
    取消后的公共无效(FirebaseError FirebaseError){
    System.out.println(“读取失败:+firebaseError.getMessage());
    }
    });
    
    shift此行listview.setAdapter(adapter);作为“创建自定义baseadapter”函数的最后一行,将firebase数据存储在arraylist中,并将其传递给adapter。@NiteshMishra示例..如果不介意的话
     public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    
    private Context context;
    private List<DogExpenditure> uploads;
    
    public MyAdapter(Context context, List<DogExpenditure> uploads) {
        this.uploads = uploads;
        this.context = context;
    }
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.layout_firebase_images, parent, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }
    
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        DogExpenditure upload = uploads.get(position);
    
        holder.textViewName.setText(upload.getAmount());
        holder.textView1.setText(upload.getYourData());
    
    }
    
    @Override
    public int getItemCount() {
    
        return uploads.size();
    }
    
    class ViewHolder extends RecyclerView.ViewHolder {
    
        public TextView textViewName;
        public ImageView imageView;
    
        public ViewHolder(View itemView) {
            super(itemView);
    
            textViewName = (TextView) itemView.findViewById(R.id.textViewName);
            textview1 = (TextView) itemView.findViewById(R.id.your_id);
        }
    }
     }
    
    private List<DogExpenditure> uploads;
    MyAdapter adapter;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mystatement);
        listview = (ListView) findViewById(R.id.listview);
        textView4 = (TextView) findViewById(R.id.textView4);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, list);
        listview.setAdapter(adapter);
        dref = FirebaseDatabase.getInstance().getReference();
        uploads = new ArrayList<>();
    
        DatabaseReference dref = FirebaseDatabase.getInstance().getReference();
        dref= dref.child("Expenditure");
    
        dref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                    //Getting the data from snapshot
                    DogExpenditure dogExpenditure = postSnapshot.getValue(DogExpenditure.class);
                    uploads.add(dogExpenditure);
                }
                adapter = new MyAdapter(getApplicationContext(), uploads);
                recyclerView.setAdapter(adapter);
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
    
    
            public void onCancelled(FirebaseError firebaseError) {
                System.out.println("The read failed: " + firebaseError.getMessage());
            }
        });