当前位置: 首页 > 知识库问答 >
问题:

关于使用从firebase android studio检索创建动态列表视图

傅啸
2023-03-14

当我尝试使用ListView从firebase检索数据时,我遇到了无限运行,我不知道该如何解决它。

这是我的java代码

package com.example.atheer.booklyv1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
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 com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.Map;

public class approvedAdmin extends AppCompatActivity implements View.OnClickListener{

    DatabaseReference dref;
    ListView listview;

    ArrayList<String> list=new ArrayList<>();
     ArrayAdapter<String> adapter;

    public approvedAdmin() {
    }

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_approved_admin);
       listview=(ListView)findViewById(R.id.list);
        dref= FirebaseDatabase.getInstance().getReference("client");
       // adapter.notifyDataSetChanged();
        dref.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                String status;
                String name;
                String email;

                Toast.makeText(approvedAdmin.this, "ok", Toast.LENGTH_SHORT).show();
                for(DataSnapshot ds: dataSnapshot.getChildren() ){
                    if (ds.hasChild("Status")){
                        status=ds.child("Status").getValue(String.class);
                        if (status.equalsIgnoreCase("Not approved")){
                            name= ds.child("name").getValue(String.class);
                            list.add(name);
                            adapter= new ArrayAdapter<String>(approvedAdmin.this, android.R.layout.simple_list_item_1, list);
                            listview.setAdapter(adapter);
                        }}
                    }}
            @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) {
            }
        });
        }

    @Override
    public void onClick(View v) {
    }
}

这是我的xml代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".approvedAdmin">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:orientation="vertical"
            android:paddingLeft="15dp"
            android:paddingRight="15dp">
         <ListView
                android:id="@android:id/list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                />
        </LinearLayout>
</android.support.constraint.ConstraintLayout>

共有1个答案

羊禄
2023-03-14

您需要从for循环中移出设置适配器代码,如下所示

for(DataSnapshot ds: dataSnapshot.getChildren() ){
    if (ds.hasChild("Status")){
        status=ds.child("Status").getValue(String.class);
        if (status.equalsIgnoreCase("Not approved")){
            name= ds.child("name").getValue(String.class);
            list.add(name);
        }
    }
}

adapter= new ArrayAdapter<String>(approvedAdmin.this, android.R.layout.simple_list_item_1, list);
listview.setAdapter(adapter);

您还需要将listview id从android:id=“@android:id/list更改为android:id=“@+id/list”

 类似资料:
  • 我刚到姜戈。我目前正在通过推特应用编程接口对实时用户推文进行情感分析。我已经设法做了分析和表达情感。现在,我想在我的Django应用程序中使用图表(也许是条形图或饼图)来可视化情感,但我不确定如何实现。 我在考虑使用图表。js使其具有响应性,但大多数示例都使用静态数据,因此我没有成功地将从Twitter API提取的数据与图表集成。js。 这是我的网页截图。这张表格是摘录的推特及其相应的情感。然而

  • 问题内容: 因此,首先,我的代码基于该线程中可接受的答案。 我正在尝试从数据库创建一个表视图,并且该表视图应根据用户要求的数据动态填充。到目前为止,尽管工作正常,但我的问题是,从数据库收集的所有值都在Java中解释为字符串,但是我需要它们的实际值。 这样做的原因是javafx tableview的内置排序机制将所有数字排序为字符串,因为填充表时它们的类型会转换为字符串。 示例:值921、200、1

  • 我试图弄清楚如何通过使用与哥伦布()函数并在pySpark中的cp_codeset列()函数中调用udf来动态地为列表中的每个项目创建列(在这种情况下为列表)。下面是我写的代码,但它给了我一个错误。 另一种选择是手动执行它,但在这种情况下,我必须编写相同的udf函数并使用养分()函数调用它75次(这是cp_codeset["col_names"]的大小) 下面是我的两个数据帧,我正在尝试获得结果如

  • 我试图从Firebase中检索用户的追随者,并将他们填充到一个中,以便任何人都能看到,就像twitter和Instagram一样,当我运行该应用程序时,它会返回一个错误。 我的代码: 公共类ViewFollowersFragment扩展了片段{private static final String TAG=“ViewFollowersFragment”; 我似乎无法适应整个代码。

  • 问题内容: 我有一个我想在SQL企业管理器中创建表的视图,但是运行此查询时总是会出现错误: 到目前为止,错误是:“’as’处的语法错误” 视图太大。是否可以使用前10名? 问题答案: 不支持。 用这个: 或者

  • 我有一个包含100列的数据框: 我有一个列名列表: 结构列表=['column4','column3','column2'] 预期架构: 目前,我正在对以下值进行硬编码: 是否有一种方法可以动态传递列表中的值?