Android 在列表视图中显示Firebase的文本视图和图像

Android 在列表视图中显示Firebase的文本视图和图像,android,listview,firebase,firebase-realtime-database,Android,Listview,Firebase,Firebase Realtime Database,这是我数据库中的数据 我想将数据中的“宠物名”(TextView)和“imageRef”(imageView)字段显示到ListView中,当我运行此代码时,我没有任何错误,但它仍然不会显示数据中的文本或图像(它显示的是一个空页) 谁能告诉我我做错了什么?! 谢谢♥ 我有一个模型课: public class ModelClass { String Nume,imagine; public String getNume() { return Nume;

这是我数据库中的数据

我想将数据中的“宠物名”(TextView)和“imageRef”(imageView)字段显示到ListView中,当我运行此代码时,我没有任何错误,但它仍然不会显示数据中的文本或图像(它显示的是一个空页)

谁能告诉我我做错了什么?! 谢谢♥

我有一个模型课:

public class ModelClass {
    String Nume,imagine;

    public String getNume() {
        return Nume;
    }

    public void setNume(String nume) {
        Nume = nume;
    }

    public String getImagine() {
        return imagine;
    }

    public void setImagine(String imagine) {
        this.imagine = imagine;
    }

    public ModelClass(String nume, String imagine) {
        Nume = nume;
        this.imagine = imagine;
    }
}
public class ModelClass {
    @PropertyName("pet name")
    String Nume;
    @PropertyName("imageRef")
    String imagine;

    //...
我的适配器:

public class MyAdapt extends ArrayAdapter<ModelClass> {
    private Activity context;
    private int resource;
    private List<ModelClass> listImage;

    public MyAdapt(@NonNull Activity context, @LayoutRes int resource, @NonNull List<ModelClass> objects) {
        super(context, resource, objects);
        this.context = context;
        this.resource = resource;
        listImage = objects;
    }
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();

        View v = inflater.inflate(resource, null);
        TextView tvName = (TextView) v.findViewById(R.id.tvPetName);
        ImageView img = (ImageView) v.findViewById(R.id.iv2);

        tvName.setText(listImage.get(position).getNume());
        Glide.with(context).load(listImage.get(position).getImagine()).into(img);


        return v;

    }
    public void addElement(ModelClass element) {

        listImage.add(element);
    }
}
公共类MyAdapt扩展了ArrayAdapter{
私人活动语境;
私有int资源;
私有列表列表图像;
公共MyAdapt(@NonNull活动上下文、@LayoutRes int-resource、@NonNull列表对象){
超级(上下文、资源、对象);
this.context=上下文;
这个资源=资源;
listImage=对象;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
LayoutInflater充气器=上下文。getLayoutInflater();
视图v=充气机。充气(资源,空);
TextView tvName=(TextView)v.findViewById(R.id.tvPetName);
ImageView img=(ImageView)v.findViewById(R.id.iv2);
setText(listImage.get(position.getNume());
Glide.with(context).load(listImage.get(position.getImagine()).into(img);
返回v;
}
公共无效添加元素(ModelClass元素){
添加(元素);
}
}
以及列表视图所在的页面:

public class PetFeed2 extends AppCompatActivity {
    private DatabaseReference mDatabaseRef;
    private List<ModelClass> imgList;
    private ListView lv;
    private MyAdapt myAdapter;
    private ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pet_feed2);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        imgList = new ArrayList<>();
        lv = (ListView) findViewById(R.id.lv);

        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Please wait loading list image...");
        progressDialog.show();

        mDatabaseRef = FirebaseDatabase.getInstance().getReference("Data");

        mDatabaseRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                progressDialog.dismiss();


                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                    ModelClass img = snapshot.getValue(ModelClass.class);
                    imgList.add(img);
                }


                myAdapter = new MyAdapt(PetFeed2.this, R.layout.custumpet, imgList);

                lv.setAdapter(myAdapter);

                mDatabaseRef.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        progressDialog.dismiss();

                        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                            ModelClass img = snapshot.getValue(ModelClass.class);
                            myAdapter.addElement(img);
                        }

                        myAdapter.notifyDataSetChanged();
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}
公共类PetFeed2扩展了AppCompative活动{
私有数据库引用mDatabaseRef;
私人名单;
私有ListView lv;
私有myAdapter;
私有进程对话;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u pet\u feed2);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
imgList=newarraylist();
lv=(ListView)findViewById(R.id.lv);
progressDialog=新建progressDialog(此);
setMessage(“请等待加载列表图像…”);
progressDialog.show();
mDatabaseRef=FirebaseDatabase.getInstance().getReference(“数据”);
mDatabaseRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
progressDialog.disclose();
对于(DataSnapshot快照:DataSnapshot.getChildren()){
ModelClass img=snapshot.getValue(ModelClass.class);
imgList.add(img);
}
myAdapter=新的MyAdapt(PetFeed2.this,R.layout.custumpet,imgList);
lv.设置适配器(myAdapter);
mDatabaseRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
progressDialog.disclose();
对于(DataSnapshot快照:DataSnapshot.getChildren()){
ModelClass img=snapshot.getValue(ModelClass.class);
myAdapter.addElement(img);
}
myAdapter.notifyDataSetChanged();
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
}

问题是您需要读取字段
pet name
imageRef
,但是ModelClass对象没有与这些字段匹配的变量。因此,您需要在ModelClass中执行以下操作:

public class ModelClass {
    String Nume,imagine;

    public String getNume() {
        return Nume;
    }

    public void setNume(String nume) {
        Nume = nume;
    }

    public String getImagine() {
        return imagine;
    }

    public void setImagine(String imagine) {
        this.imagine = imagine;
    }

    public ModelClass(String nume, String imagine) {
        Nume = nume;
        this.imagine = imagine;
    }
}
public class ModelClass {
    @PropertyName("pet name")
    String Nume;
    @PropertyName("imageRef")
    String imagine;

    //...
这样,您就可以将字段
petname
与变量
Nume
匹配,并将其与另一个变量匹配

编辑:

现在在适配器中更改以下内容:

View v = inflater.inflate(resource, null);


在我修改它之后,我可以看到我的错误,它说我的LIstview所在的页面中的行“ModelClass img=snapshot.getValue(ModelClass.class);”有问题。你知道我怎么修吗?:)不,我不知道FirebaseUI,我应该学习它吗?你是对的,现在应用程序没有崩溃,但出于某种原因,我的listview上仍然没有任何内容:(我想你需要在你的适配器上做一个更改。请看我的回答你太好了,很抱歉打扰了你!!我在适配器上更改了你说的那行,但它仍然显示一个空白页:(,你知道我是否还有其他问题吗?你为什么有这个
mDatabaseRef.addValueEventListener(…
两次?我不知道,但这可能是问题所在。无论如何,看看这本使用ArrayAdapter的指南:它可以很有用