【问题标题】:Printing cursor information to logcat将游标信息打印到 logcat
【发布时间】:2021-02-15 04:11:53
【问题描述】:

我想将以下信息打印到 Android 中的 logcat 窗口:

• 数据库版本号(使用 db.getVersion() 作为版本号)。 • 光标中的列数。 • 光标中列的名称。 • 光标中的结果数 • 光标中的每一行结果

我在我的应用程序末尾创建了以下类来完成此操作:

public void printCursor(Cursor c, int version) {

    int dbVersion = version;
    int numberCursorColumns = c.getColumnCount();
    String[] nameCursorColumns = c.getColumnNames();
    int numberCursorResults = c.getCount();
    List<Message> cursorRowValuesList = new ArrayList<>();
    String cursorRowValues;

    c.moveToFirst();

    if (c.moveToFirst()) {

        int sendColIndex = c.getColumnIndex(MyOpener.COL_TEXT);
        int typeColIndex = c.getColumnIndex(MyOpener.MESSAGE_TYPE);
        int idColIndex = c.getColumnIndex(MyOpener.COL_ID);

        String send = c.getString(sendColIndex);
        int type = c.getInt(typeColIndex);
        long id = c.getLong(idColIndex);

        cursorRowValuesList.add(new Message(send, type, id));
    }
        cursorRowValues = TextUtils.join(",", cursorRowValuesList);


    Log.i("DATABASE VERSION", Integer.toString(dbVersion));
    Log.i("NUMBER OF COLUMNS", Integer.toString(numberCursorColumns));
    Log.i("COLUMN NAMES", Arrays.toString(nameCursorColumns));
    Log.i("NUMBER OF RESULTS", Integer.toString(numberCursorResults));
    Log.i("ROW VALUES", cursorRowValues);
}

所有的打印输出都有效,除了最后一个,ROW VALUES,它应该打印游标中的每一行结果。这是我运行应用程序时在 logcat 中打印的内容:

02-14 14:52:35.222 5969-5969/com.example.androidlabs I/数据库版本:1

02-14 14:52:35.222 5969-5969/com.example.androidlabs I/列数:3

02-14 14:52:35.222 5969-5969/com.example.androidlabs I/COLUMN NAMES: [_id, TEXT, TYPE]

02-14 14:52:35.222 5969-5969/com.example.androidlabs I/结果数:3

02-14 14:52:35.222 5969-5969/com.example.androidlabs I/ROW VALUES:com.example.androidlabs.Message@55b3428

为什么我会收到关于 ROW VALUES 的消息?

【问题讨论】:

    标签: android arraylist logcat android-cursor


    【解决方案1】:

    为什么我会收到关于 ROW VALUES 的消息?

    cursorRowValues 使用以下方式创建:

    cursorRowValues = TextUtils.join(",", cursorRowValuesList);
    

    cursorRowValuesList 是通过您的循环创建的,并在循环的每次传递中添加一个新的 Message 对象:

    cursorRowValuesList.add(new Message(send, type, id));
    

    所以,您的cursorRowValues 反映了cursorRowValuesList 拥有一个Message 对象。您没有在 Message 上覆盖 toString(),因此您获得了默认实现。

    如果您需要其他输出,您可能希望覆盖Message 上的toString()

    【讨论】:

    • 谢谢。有关如何在 Message 上覆盖 toString() 的任何建议?
    • @DrVonSamuel:嗯,添加一个toString() 方法。您可以在任何一本不错的 Java 书籍中了解有关 toString() 的更多信息。或者,您可以查看thisthisthis
    • 我正在尝试将 ArrayList 转换为 ArrayList,以便我可以运行 toString()。尽管如此,这还是行不通: List stringValues = new ArrayList(cursorRowValuesList.size()); for (Message messageObject : cursorRowValuesList) { stringValues.add(messageObject != null ? messageObject.toString() : null); } cursorRowValues = stringValues.toString();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多