【问题标题】:Populating a ListView with firebase data in android在android中使用firebase数据填充ListView
【发布时间】:2017-03-07 12:19:48
【问题描述】:

我又回到了这个问题,虽然我很接近:我有以下代码,我试图在列表视图中显示 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());
            }
        });

当我在我的 android studio 控制台中运行此代码时,我会看到以下输出。这正是我想要的。但是,它没有显示在应用程序的布局视图中,而是显示一个空白屏幕。

**03-07 15:15:05.777 32332-32332/com.example.moses.farm I/System.out: Amount: dd
03-07 15:15:05.779 32332-32332/com.example.moses.farm I/System.out: Reason for Use: dddd
03-07 15:15:05.782 32332-32332/com.example.moses.farm I/System.out: Amount: kwaraaaa
03-07 15:15:05.782 32332-32332/com.example.moses.farm I/System.out: Reason for Use: ayeeeee**

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

【问题讨论】:

  • 移行这一行 listview.setAdapter(adapter);作为你的 on create 函数的最后一行
  • 创建一个自定义baseadapter,将firebase数据存储在arraylist中并将其传递给adapter。
  • @NiteshMishra 样品请..如果你不介意

标签: android firebase firebase-realtime-database firebaseui


【解决方案1】:

您可以使用FirebaseUI.

使用 firebase 数据填充 listView 非常简单。

然后添加依赖项:

  1. 连接到 Firebase
  2. 创建自定义 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);

更多info here.

【讨论】:

    【解决方案2】:
    //Just above onCreate
    List<String> expenseList = new ArrayList<>();
    ArrayAdapter<String> adapter;
    
    //In value event listener
    expenseList.add(expense)
    
    if(expensList.size() == 1)
    {
      adapter = new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_list_item_1,expensList);
      listView.setAdapter(adapter)
    }
    else if(expenseList.size() > 1)
    {
      adapter.notifyDatasetChanged();
    }
    

    【讨论】:

      【解决方案3】:

      创建一个 dref 的单例对象。

      并且列表尚未初始化。

      【讨论】:

        【解决方案4】:

        您应该将您的费用添加到您的清单中,并使用
        通知更改 adapter.notifyDataSetChanged().

        list.add(费用)

        adapter.notifyDataSetChanged()

        【讨论】:

          【解决方案5】:

          首先创建一个适配器,因为您已经有了模型类。 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);
              }
          }
           }
          

          现在在你的活动中

          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());
                  }
              });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多