无法在Android中使用rawQuery命令填充ListView

时间:2012-02-22 00:37:04

标签: android sqlite android-listview

我在使用ListView命令在Android中填充rawQuery时遇到了一些问题,我希望有一些新的眼睛可以帮助我。

我正在使用一种方法从assets文件夹复制我自己的数据库,我相信这是正常的。数据库正在被正确复制,因为我正在DDMS中看到这种情况。我也收到log.i个条目,告诉我数据库正在正常打开。我在Logcat时没有收到任何错误,但没有任何内容填充我的ListView

我的命令下面有什么问题可以查询数据库并报告回来吗?

非常感谢任何帮助。

        private void fillData() {
        Cursor c =  myDbHelper.rawQuery("SELECT name FROM sqlite_master",   null);
            startManagingCursor(c);
        // Create an array to specify the fields we want to display in the list.
            String[] from = new String[]{"name"};

            // an array of the views that we want to bind those fields too.
            int[] to = new int[]{R.id.listview};

            // Now create a simple cursor adapter and set it to display
            SimpleCursorAdapter notes = 
            new SimpleCursorAdapter(this, R.layout.list_view, c, from, to);
            setListAdapter(notes);             
      }

这是我的lists.xml文件,我想要填充ListView的结果:

       <?xml version="1.0" encoding="utf-8"?>
       <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

      <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
         <TextView
            android:text = "Lists"
            style="@style/HeaderText"
            android:textSize="15dp"
            android:gravity="center" />
          <View
            android:layout_width="wrap_content"
            android:background="@drawable/gradient"
            android:layout_height="1dp" />
        <LinearLayout 
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

        <EditText
                android:id="@+id/searchText"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"/>

        <Button
                android:id="@+id/searchButton"
                android:text="Search"
                android:background = "@drawable/main_buttons"
                style="@style/ButtonText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />"

   </LinearLayout>
        <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />  

             <TextView android:id="@android:id/empty"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#000000"
               android:text="No data"
               style="@style/ButtonText"/>
        </LinearLayout>

        </LinearLayout>

最后,list_view布局只是TextView来填充rawQuery命令中的正确列表。

2 个答案:

答案 0 :(得分:1)

如果要在列表中显示表名,可以尝试使用fillData()方法:

private void fillData() {
        Cursor c = myDbHelper.rawQuery("SELECT name FROM sqlite_master", null);
        ArrayList<String> values = new ArrayList<String>();
        while (c.moveToNext()) {
            values.add(c.getString(c.getColumnIndex("name")));
        }
        c.close();
        // Now create a simple cursor adapter and set it to display
        ArrayAdapter<String> notes = new ArrayAdapter<String>(this,
                R.layout.list_view, values);
        setListAdapter(notes);
    }

ListView要求所基于的游标具有_id列。但是在该表中,您没有_id添加到查询中,因此您可以尝试将原始查询中的游标解析为ArrayList,然后将其绑定到简单ArrayAdapter }。

答案 1 :(得分:0)

好的,这里有点奇怪。 The reference

  

ListActivity的默认布局由单个布局组成,   屏幕中央的全屏列表。但是,如果你愿意,   您可以通过设置自己的视图布局来自定义屏幕布局   在onCreate()中使用setContentView()。要做到这一点,你自己的观点必须   包含一个ID为“@android:id / list”的ListView对象(或列出if   它在代码中)

所以,它说我们应该像你一样使用@android:id/list

我想您正在关注Notebook教程。是的,我有一个类似的情况,我有自己的entries_list.xml smth的布局(ListActivity

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
... some other elements here
    <ListView
        android:id="@+id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:textFilterEnabled="true" >
    </ListView>
... some other elements here

</LinearLayout>

所以我使用自己的命名:@+id/android:list代替。然后,我使用ListActivity明确设置setContentView(R.layout.entries_list);的内容视图。这适合我。你可以尝试一下。

希望它有所帮助。