Android SQLite游标返回垃圾

时间:2014-05-02 00:20:53

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

我的数据库肯定是正确填充的(< 3 SQLite数据库浏览器),但当我尝试列出视图中的所有记录时,我得到以下内容:

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" />

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在我看来,你试图看到Object类的值,它会返回正确的值

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

尝试返回String而不是Object并创建List<String>。您始终可以创建自己的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);
}

答案 1 :(得分:0)

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

覆盖toString()类中的ObjectName以生成字符串表示以供显示。

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