【问题标题】: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);
    }

【问题讨论】:

    标签: android firebase arraylist firebase-realtime-database


    【解决方案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中检索数据

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 2010-09-27
      • 2014-08-18
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 2017-06-29
      相关资源
      最近更新 更多