【问题标题】:How to retrive data of pojo initialized class?如何检索 pojo 初始化类的数据?
【发布时间】:2026-01-16 17:15:02
【问题描述】:

我已经做了什么?

我想在一个数组中获取一个调用历史记录并将该数组传递给 MySQL 数据库,所以我创建了 pojo 类并在 getter 和 setter 方法中设置了该变量。这是我的 pojo 类的 java 代码..

public class DataBean {
    String number;
    String type;
    String date;
    String duration;

    public DataBean(String number, String type, String date, String duration) {
        this.number = number;
        this.type = type;
        this.date = date;
        this.duration = duration;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getDuration() {
        return duration;
    }

    public void setDuration(String duration) {
        this.duration = duration;
    }
}

从这个 pojo 类中,我想将调用详细信息设置到该初始化变量中。这是我的MainActivity的java代码。从这段代码中,我每次都创建一个新的databean实例,所以我每次都会得到一个新的arraylist,但我只想要一个完整数据的数组..

public class MainActivity extends AppCompatActivity {

ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = (ListView) findViewById(R.id.list);
    getCallDetails();
}

public void getCallDetails() {

    String strOrder = android.provider.CallLog.Calls.DATE + " DESC";

    Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, null, null, strOrder);
    int number1 = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
    int type1 = managedCursor.getColumnIndex(CallLog.Calls.TYPE);
    int duration1 = managedCursor.getColumnIndex(CallLog.Calls.DURATION);


    while (managedCursor.moveToNext()) {

        String number = managedCursor.getString(number1);
        String type2 = managedCursor.getString(type1);
        String date11 = managedCursor.getString(managedCursor.getColumnIndexOrThrow("date")).toString();
        java.util.Date date1 = new java.util.Date(Long.valueOf(date11));
        String duration = managedCursor.getString(duration1);
        String type = null;

        String date = date1.toString();

        int callcode = Integer.parseInt(type2);
        switch (callcode) {
            case CallLog.Calls.OUTGOING_TYPE:
                type = "Outgoing";
                break;
            case CallLog.Calls.INCOMING_TYPE:
                type = "Incoming";
                break;
            case CallLog.Calls.MISSED_TYPE:
                type = "Missed";
                break;

        }
        DataBean dataBean = new DataBean(number, type, date, duration);
        ArrayList<DataBean> arrayList = new ArrayList<>();

        arrayList.add(dataBean);
        Log.d("tag", arrayList.toString());

    }
    managedCursor.close();


    /*//ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList);
    listView.setAdapter(adapter);*/

}

}

由此我可以在 logcat 中获取号码、持续时间、日期和呼叫类型。

我想要什么?

我想将它添加到 databean 的数组列表中,但不知道为什么,但每次 databean 显示以下文本..

12-02 15:18:50.636 8034-8034/com.example.hiren.callhistory D/Arrat: [com.example.hiren.callhistory.DataBean@46540ec]

我没有得到 arraylist 值,我想将该数组插入 mysql 表中。

【问题讨论】:

  • 请阅读这篇关于toString*.com/questions/3615721/…的文章,它将告诉你如何正确打印值
  • 您可能需要在循环中为每一行生成一个新的 dataBean 吗?并将其添加到循环中。在这里,您在同一实例中设置值。所以每次都会被覆盖,只保留最后一个值。对于列表,你在循环之后添加,所以你只会有值。
  • 感谢您的回复@jakubbialkowski,但我不想要字符串,我想要可以插入数据库的数组列表或数组
  • 感谢@AxelH 的回复,我无法将 Databean 初始化为循环,它给出了无法访问语句的错误
  • 不可能,你没有 break、return 或任何可能提供无法访问错误的语句。展示你是如何做到的。无论如何,如果您不在其中生成新实例。您将只有一个实例。如果不清楚,您应该学习一些 Java 课程

标签: java android mysql pojo


【解决方案1】:

这里有一个 while 循环来读取光标。

while (managedCursor.moveToNext()) {

在那里,你想生成你的 Bean 并将它们插入到一个列表中。

目前,您只将值保存在 ONE 实例中。您应该每次都构建一个新实例:

while (managedCursor.moveToNext()) {
    dataBean = new DataBean(...);
}

但是为此,您需要该值,因此将光标的值保存到您拥有的变量中,而不是实例中。而且当然。实例化后在列表中添加实例

ArrayList<DataBean> list = new ArraysList<>();
while (managedCursor.moveToNext()) {
    number = managedCursor.getString("number");
    type = managedCursor.getString("type");
    ...
    dataBean = new DataBean(number, type, date, duration);
    list.add(dataBean);
}
Log.d("tag", arrayList.toString());

【讨论】:

  • 是的,它正在工作..它给出了像'[com.example.hiren.callhistory.DataBean@1ffec3a9]'这样的值我怎样才能得到那个值的字符串??
  • @HirenGujarati 阅读 jakubbialkowski 评论。 toString 需要实现返回你想要的String格式。这是一些基本的 Java,你真的应该在尝试编写代码之前学习它。这里有很多糟糕的编码。
  • 每次获取数组时都获取新对象,但我只想要一个可以插入 MySQL 数据库的所有数据数组。请帮我解决这个@AxelH
  • @Hiren 你是什么意思?请分享您的代码并更好地解释这一点......这不清楚
  • 我已根据您的回答编辑了我的代码,它确实有效。但它提供了这么多数组列表,我只想要一个 1 个数组或 1 个整个数据的数组列表,请帮助做到这一点。