как показать объект sqlite в списке в студии Android

Я новичок в андроиде. Я просто пишу приложение, которое выдает строку из EditText и сохраняет ее в SQLite. знаю, что я хочу увидеть содержимое базы данных в ListView. Но я не знаю, как вы могли бы помочь мне написать метод для этой работы.

Это мой класс DBManager

package com.sara.app.savetextapp;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBManager extends SQLiteOpenHelper {

    public static final String DB_NAME = "Data";
    public static final String TABLE_NAME = "test";
    public static final String COLUMN_NAME= "text";
    private static final String COLUMN_TEXT_ID = "_id";

    public DBManager(Context context) {
        super(context, DB_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " ("
            + COLUMN_TEXT_ID + " integer primary key autoincrement, "
            + COLUMN_NAME + " varchar(100))");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        db.execSQL("DROP TABLE IF EXISTS");
        onCreate(db);
    }

    public Cursor getDetails()
    {
        SQLiteDatabase db = getReadableDatabase();
        return db.rawQuery("select text from Data", null);
    }


}

person SARA    schedule 15.08.2015    source источник
comment
Используйте SimpleCursorAdapter.   -  person PPartisan    schedule 15.08.2015


Ответы (3)


Если вы пишете что-то вроде приложения для создания заметок и используете SQLite для их хранения, я написал несколько довольно длинных руководства (Код | App) в моем блоге по этой теме, которые могут вам помочь. Вот суть:

Я бы рекомендовал вам заменить rawQuery внутри вашего метода getDetails() на query(). Это связано с тем, что синтаксис SQL неумолим, а метод query() позаботится о точной настройке за вас.

public Cursor getDetails() {
    return db.getReadableDatabase().query(TABLE_NAME, null, null, null, null, null, null); 
    //This will return all data in your table.
}

К вашему сведению, лучше выполнять запросы вне потока пользовательского интерфейса, например, с помощью AsyncTask, поскольку в противном случае они могут привести к зависанию приложения или даже к сбою, если ваша таблица особенно велика.

Что касается присвоения этих данных ListView, самый простой способ будет с SimpleCursorAdapter:

//Where "data" is the Cursor return by getDetails()
ListAdapter listAdapter = new SimpleCursorAdapter(this,
    R.layout.view_notes_row,
    data,
    new String[] {DBManager.COLUMN_NAME},
    new int[] {R.id.text_view},
    0);

Определите layout для своей строки и убедитесь, что в вашем общем макете есть ListView:

Макет — list_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/list_view" />
</FrameLayout>

Строка — view_notes_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/text_view" />
</LinearLayout>

И внутри вашего Activitiy:

setContentView(R.layout.list_layout);
ListView listView = (ListView) findViewById(R.id.list_view);
listView.setAdapter(listAdapter);
person PPartisan    schedule 15.08.2015
comment
спасибо за внимание и полезный ответ - person SARA; 16.08.2015

Должно быть «выбрать текст из теста», так как имя вашей таблицы — тест. Как только вы получите курсор, повторите его, чтобы прочитать данные. Как получить данные из класса курсора, отображающего данные в ListView, используйте SimpleCursorAdapter — http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html, как предложено в комментарии. Чтобы улучшить код, вместо кодирования и использования необработанных запросов попробуйте использовать проекции — http://developer.android.com/training/basics/data-storage/databases.html

person user2629865    schedule 15.08.2015

Получите строку столбца, который вы хотите отобразить (замените продукты своим столбцом).

public List<String> getAllContacts() {
        MyDBHandler helper = new MyDBHandler(getActivity().getApplicationContext(),null,null,1);
        List<String> contactList = new ArrayList<String>();
        // Select All Query
        String selectQuery = "SELECT  * FROM products WHERE 1";
        SQLiteDatabase db = helper.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {

            do {

                Product contact = new Product();
                String c;
                c=(cursor.getString(1));

                // Adding contact name to list

                contactList.add(c);
            } while (cursor.moveToNext());
        }// return contact list
        cursor.close();
        db.close();
        return contactList;
    }

Или вместо List можно использовать List (в моем случае это будет Product):

public List<Product> getAllContacts() {
        MyDBHandler helper = new MyDBHandler(getActivity().getApplicationContext(),null,null,1);
        List<Product> contactList = new ArrayList<Product>();
        // Select All Query
        String selectQuery = "SELECT  * FROM products WHERE 1";
        SQLiteDatabase db = helper.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {

            do {

                Product contact = new Product();
                String c;

                contact = new Product((cursor.getString(1)),cursor.getString(2) and so on)

                //From here you just fill your product

                contactList.add(contact);
            } while (cursor.moveToNext());
        }// return contact list
        cursor.close();
        db.close();
        return contactList;
    }
person EnderNicky    schedule 15.08.2015
comment
Для второго варианта вы должны использовать специальный адаптер! - person EnderNicky; 15.08.2015