【问题标题】:Android SQLite cursor returning junkAndroid SQLite 游标返回垃圾
【发布时间】:2014-06-18 14:09:44
【问题描述】:

我的数据库肯定被正确填充(

com.example.AppName.ObjectName@4055e8c6
com.example.AppName.ObjectName@3456e789
com.example.AppName.ObjectName@4563e5b0

我正在使用 simple_list_item_1 和一个 ArrayAdapter。

在我的活动类中创建语句:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_saved_objects);

    datasource = new ObjectsDatabase(this);
    datasource.open();

    List<Object> values = datasource.getSavedObjects();

    ArrayAdapter<ObjectName> adapter = new ArrayAdapter<ObjectName>(this,
            android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);
}

上述活动类的XML布局:

<LinearLayout
    android:id="@+id/group"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <Button
        android:id="@+id/menu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onButton1Click"
        android:text="@string/menu_back" />

</LinearLayout>

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

有什么想法吗?

【问题讨论】:

  • 为什么要使用 ArrayAdapter 而不是 SimpleCursorAdapter(设计用于 Cursors 和 SQLite)?

标签: android sqlite listview android-activity android-cursor


【解决方案1】:

在我看来,您正在尝试查看 Object class 的值,它会为您返回正确的值

com.example.AppName.ObjectName@4055e8c6
com.example.AppName.ObjectName@3456e789
com.example.AppName.ObjectName@4563e5b0

尝试返回 String 而不是 Object 并创建 List&lt;String&gt;。您始终可以创建自己的 element 类型,获取该自定义类对象并返回它的 String 值。

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_saved_objects);

    datasource = new ObjectsDatabase(this);
    datasource.open();

    List<String> values = datasource.getSavedObjects();

    ArrayAdapter<ObjectName> adapter = new ArrayAdapter<ObjectName>(this,
            android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);
}

【讨论】:

  • 这对我来说完全有意义,我只是不确定代码中的哪个位置发生了这种情况。谢谢你的回答,我会玩这个:)
【解决方案2】:

您看到的是 toString() 的默认实现 ObjectName 对象。

在您的 ObjectName 类中覆盖 toString() 以生成用于显示目的的字符串表示形式。

还值得考虑使用游标适配器而不是数组适配器,因为数据显然来自数据库查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2015-06-27
    • 2016-07-12
    • 1970-01-01
    相关资源
    最近更新 更多