如何获取存储在列表中的对象的属性

Posted

技术标签:

【中文标题】如何获取存储在列表中的对象的属性【英文标题】:How to get properties of an object stored in a List 【发布时间】:2019-10-17 21:24:17 【问题描述】:

我从 firebase 实时数据库中检索数据,然后将其存储到列表中,以便显示数据。

我的问题是,显示的数据没有显示存储的对象及其属性,而是所谓的名称/标签或与此类似的东西。

正在显示的内容:

com.example.husiapp2.Homework@1abbfc6

应该显示什么(带有属性的对象):

Homework
-Title,
-Class

我的代码:

public class Homework 
    public String Title;
    public String Class;
    public String ExpireDate;

    public Homework()

    public Homework(String title, String aClass,String expireDate) 
        Title = title;
        Class = aClass;
        ExpireDate = expireDate;
    


 DatabaseReference ref;
 Homework homework;
 final List<Homework> hw = new ArrayList<>();

 ListView hwlist;

 protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_hw);
        Log.d("HWAC122",hw.toString());
        hwlist = findViewById(R.id.hwlist);
        ref = FirebaseDatabase.getInstance().getReference("User").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("Homework");

        ref.addValueEventListener(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                for(DataSnapshot ds:dataSnapshot.getChildren())
                    homework = new Homework();
                    homework.Title = ds.getValue(Homework.class).Title;
                    homework.Class = ds.getValue(Homework.class).Class;
                    homework.ExpireDate = ds.getValue(Homework.class).ExpireDate;
                    Log.d("test123",homework.toString());
                    hw.add(homework);
                
                SetAdapter();
            


        );


    
 public void SetAdapter()
        ArrayAdapter adapter = new ArrayAdapter<Homework>(this,android.R.layout.simple_list_item_1,hw);
        hwlist.setAdapter(adapter);
    

【问题讨论】:

【参考方案1】:

com.example.husiapp2.Homework@1abbfc6 是不覆盖toString() 的对象的标准字符串格式。它由对象的类及其在 JVM 内存中的位置组成。如果您希望 toString() 生成其他内容,则必须覆盖它并使其返回您要打印的内容。

public class Homework 
    public String Title;
    public String Class;
    public String ExpireDate;

    public Homework()

    public Homework(String title, String aClass,String expireDate) 
        Title = title;
        Class = aClass;
        ExpireDate = expireDate;
    

    // Override toString
    @Override
    public String toString() 
        return "Whatever you want it to be";
    

覆盖toString() 并不总是最好的。很多时候最好只编写一些其他函数,将对象传递给它,然后让它返回格式化的字符串。无论哪种方式,您都必须编写生成字符串的代码。

【讨论】:

对不起,我不知道你在问什么。 toString 与所谓的“生命周期”无关。【参考方案2】:

在您创建的 java 类中实现 getter 和 setter 方法。按 alt+insert 并为您声明的所有变量选择实现 getter 和 setter。通过这个,您可以将数据插入到firebase并从firebase中检索数据

【讨论】:

以上是关于如何获取存储在列表中的对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Actionscript 中获取对象的属性列表?

c# 如何获取列表中某个属性最大或最小的元素?

如何使用 LINQ 从对象列表中获取唯一的属性列表?

如何迭代对象列表并使用颤振在小部件中获取它们的属性?

如何遍历存储在数组列表中的对象[重复]

如何根据文档 ID 数组获取文档列表?