【问题标题】:Android: SQLite cursor.getPosition() returns string?Android:SQLite cursor.getPosition() 返回字符串?
【发布时间】:2016-03-02 01:51:30
【问题描述】:

c.getString(c.getPosition()) 返回 1 代表第一个元素, 他为第二元素, 锂作为第三元素,和 第四个元素为 9.0122。

这些对我来说是非常奇怪的位置值,我正在努力理解这一点。

它应该返回设置为 PRIMARY KEY 的 atomicNumber 吗?我是 Android 新手,在文档中说 cursor.getPosition():

"返回光标在行集中的当前位置"

这是否意味着它返回 ROWID 或列中的当前位置?

public void Test(){
    String URL = "content://com.apress.gerber.calculator.PeriodicTable/elements";
    Uri element = Uri.parse(URL);

    Cursor c = getContentResolver().query(element, null, null, null, PeriodicTable.ATOMIC_NUMBER);

    if (c.moveToFirst()) {
        do{
            Toast.makeText(this,
                    c.getString(c.getColumnIndex(PeriodicTable.ATOMIC_NUMBER)) +
                            ", " +  c.getString(c.getColumnIndex( PeriodicTable.SYMBOL)) +
                            ", " + c.getString(c.getColumnIndex( PeriodicTable.NAME)) +
                            ", " + c.getString(c.getColumnIndex(PeriodicTable.MOLAR_MASS)) +
                            ", POSITION: " + c.getString(c.getPosition()),
                    Toast.LENGTH_SHORT).show();
        } while (c.moveToNext());
    }
    else Toast.makeText(this, "Database is empty.", Toast.LENGTH_SHORT).show();

}

解析到 SQLite 数据库的 Element.xml:

<elements>
    <element>
        <molarMass>1.0079</molarMass>
        <name>Hydrogen</name>
        <symbol>H</symbol>
        <atomicNumber>1</atomicNumber>
    </element>

    <element>
        <molarMass>4.0026</molarMass>
        <name>Helium</name>
        <symbol>He</symbol>
        <atomicNumber>2</atomicNumber>
    </element>

    <element>
        <molarMass>6.941</molarMass>
        <name>Lithium</name>
        <symbol>Li</symbol>
        <atomicNumber>3</atomicNumber>
    </element>

    <element>
        <molarMass>9.0122</molarMass>
        <name>Beryllium</name>
        <symbol>Be</symbol>
        <atomicNumber>4</atomicNumber>
    </element>
</elements>

SQLite 表语句:

static final String CREATE_DB_TABLE =
        " CREATE TABLE " + ELEMENTS_TABLE_NAME +
                " ( atomicNumber INTEGER PRIMARY KEY ASC, " +
                " symbol TEXT NOT NULL, " +
                " name TEXT NOT NULL, " +
                " molarMass TEXT NOT NULL);";

【问题讨论】:

    标签: java android xml sqlite cursor


    【解决方案1】:

    当您调用c.getString() 时,您将获取传入索引的列中当前行的数据。您的代码将getPosition() 返回的行号作为该列索引传递。从您的 getPosition() 调用中删除 getString() 以获得您所期望的。

    ", POSITION: " + c.getPosition(),
    

    【讨论】:

    • 啊,我明白了,所以我一直在获取列值。我认为 getString() 将位置转换为字符串,这就是我无法弄清楚的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2020-08-07
    相关资源
    最近更新 更多