Невозможно заполнить ListView с помощью команды rawQuery в Android - PullRequest
2 голосов
/ 22 февраля 2012

У меня возникли некоторые проблемы с заполнением ListView в Android командой rawQuery, я надеюсь, что некоторые новые взгляды помогут.

Я использую метод для копирования своей базы данных из папки ресурсов, которая, как я считаю, работает правильно.База данных копируется правильно, так как я наблюдаю, как это происходит в 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 ]

1 голос
/ 23 февраля 2012

Если вы хотите отобразить имена таблиц в своем списке, вы можете попробовать этот метод 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.

0 голосов
/ 22 февраля 2012

Хорошо, здесь что-то странное. Ссылка говорит

ListActivity имеет макет по умолчанию, который состоит из одного полноэкранного списка в центре экрана.Однако, если вы хотите, вы можете настроить макет экрана, установив свой собственный макет представления с помощью setContentView () в onCreate ().Для этого ваше собственное представление ДОЛЖНО содержать объект ListView с идентификатором «@android: id / list» (или list, если он в коде)

Итак, он говорит, что мы должны использовать @android:id/list, как ты.

Полагаю, вы следуете учебнику по ноутбуку.Потому что у меня есть похожий случай, когда у меня есть свой собственный макет (entries_list.xml) для моего 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);.Это работает для меня.Вы можете попробовать.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...