Android:如何在sqlite数据库中搜索数据并将其显示在列表视图中

东达纳达(DhonTañada)

如何通过使用EditText进行搜索来显示数据库中ListView中的数据,或者可能对其进行过滤。您能告诉我我需要执行哪些代码吗,我想我遗漏了一些内容,因为我的代码不搜索它,只是将其数据显示在ListView中。任何帮助将非常感激。

这是我的代码:

DBListHelper

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Locale;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.util.Log;

class DBlistHelper extends SQLiteOpenHelper {


private static final String DATABASE_PATH = "/data/data/com.example.searching/databases/";
private static final String DATABASE_NAME = "LPG.db";
private static final int SCHEMA_VERSION = 1;
private static final String TABLE_NAME = "Recipes";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_RECIPE = "Recipe";
public static final String COLUMN_INGRIDIENTS = "Ingredients";
//public static final String COLUMN_PROCEDURE = "procedure";



public SQLiteDatabase dbSqlite;

private final Context myContext;

public DBlistHelper(Context context){
    super(context, DATABASE_NAME, null, SCHEMA_VERSION );
    this.myContext= context;

}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public void createDatabase() {

    createDB();

}

public void createDB(){

    boolean dbExist = DBExists();

    if(!dbExist){

        this.getReadableDatabase();

        copyDBFromResource();

    }

}



private boolean DBExists() {

    SQLiteDatabase db = null;

    try{
        String databasePath = DATABASE_PATH + DATABASE_NAME;
        db = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.OPEN_READWRITE);
        db.setLocale(Locale.getDefault());
        db.setLockingEnabled(true);
        db.setVersion(1);

    } catch (SQLiteException e) {

        Log.e("SqlHelper", "database not found");
    }

    if (db != null){

        db.close();
    }

    return db != null ? true : false;

}



private void copyDBFromResource(){

    InputStream inputStream = null;
    OutputStream outStream = null;
    String dbFilePath =  DATABASE_PATH + DATABASE_NAME;

    try{

        inputStream = myContext.getAssets().open(DATABASE_NAME);

        outStream = new FileOutputStream(dbFilePath);

        byte [] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) > 0){
            outStream.write(buffer, 0, length);

        }

        outStream.flush();
        outStream.close();
        inputStream.close();

    } catch (IOException e){

        throw new Error("Problem copying database from resource file.");
    }

}


public void openDatabase () throws SQLException {

    String myPath = DATABASE_PATH + DATABASE_NAME;
    dbSqlite = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);

}

@Override
public synchronized void close () {

    if (dbSqlite !=null){

        dbSqlite.close();
    }

    super.close();

}

public Cursor getCursor() {

    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder ();

    queryBuilder.setTables(TABLE_NAME);

    String [] asColumnsToReturn = new String [] { COLUMN_ID, COLUMN_RECIPE, COLUMN_INGRIDIENTS};

    Cursor mCursor = queryBuilder.query(dbSqlite, asColumnsToReturn, null, null, null, null, "Recipe ASC");

    return mCursor;
}

public String getName (Cursor c){
    return(c.getString(1));


}

}

Main.java

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;


public class Main extends Activity {

private DBlistHelper dbrecipelistHelper = null;
private Cursor ourCursor = null;
private recipeAdapter adapter = null;

EditText inputSearch = null;


@Override
protected void onCreate(Bundle savedInstanceState) {    
    try
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    inputSearch = (EditText) findViewById(R.id.inputSearch);

    ListView myListView = (ListView) findViewById(R.id.listView);


    dbrecipelistHelper = new DBlistHelper(this);

    dbrecipelistHelper.createDatabase();

    dbrecipelistHelper.openDatabase();

    ourCursor=dbrecipelistHelper.getCursor();

    startManagingCursor(ourCursor);

    adapter = new recipeAdapter(ourCursor);

    myListView.setAdapter(adapter);


    //myListView.setOnItemClickListener(onListClick);

    }
    catch (Exception e)
    {

        Log.e("ERROR", "ERROR IN CODE: " + e.toString());   

        e.printStackTrace();

    }



    inputSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            Main.this.adapter.getFilter().filter(cs);   
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub                          
        }
    });




}


class recipeAdapter extends CursorAdapter {

    recipeAdapter(Cursor c){
        super(Main.this, c);
    }

    @Override
    public  void bindView (View row, Context ctxt, Cursor c)
    {
        recipeHolder holder = (recipeHolder)row.getTag();
        holder.populateFrom(c, dbrecipelistHelper);
    }
    @Override
    public  View newView(Context ctxt, Cursor c, ViewGroup parent)
    {
        LayoutInflater inflater = getLayoutInflater();
        View row=inflater.inflate(R.layout.list, parent, false);
        recipeHolder holder = new recipeHolder(row);
        row.setTag(holder);
        return(row);
    }


}

static class recipeHolder {
    private TextView name=null;

    recipeHolder(View row){
        name=(TextView)row.findViewById(R.id.recipeText);
    }

    void populateFrom(Cursor c, DBlistHelper r){
        name.setText(r.getName(c));
    }

}
}
Keshav1234

要搜索值,请定义编辑文本并在数据库中实现文本观察器,输入查询,如下所示:

 editText.addTextChangedListener(new TextWatcher(){ 

Cursor cusror;

cursor=db.rawQuery("SELECT * FROM "+ DB_NAME + " WHERE " 
                + DB_NAME.id + " = " + DB_NAME.Id + " AND " + DB_NAME.Title +
                 " LIKE  '"+search.getText()+"%'");

如果获取正确的值,请检查这些值,然后返回光标。希望能帮助到你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在列表视图中显示sqlite数据库中的数据

来自分类Dev

如何在数据库中保存图像并将其显示到MVC 4中的视图中?

来自分类Dev

如何在数据库中保存图像并将其显示到MVC 4中的视图中?

来自分类Dev

Android Studio,如何从Sqlite数据库中检索数据并将其显示到textview中?

来自分类Dev

如何通过单击按钮从sqlite数据库中检索数据并显示在列表视图中

来自分类Dev

如何从列表视图中移动数据并将其插入数据库?

来自分类Dev

如何从 Firebase 数据库存储中检索数据并将其显示到自定义列表视图中?

来自分类Dev

Android:通过单击列表视图上的项目进行导航,并检索数据frm数据库并将其显示在另一个列表视图中

来自分类Dev

如何在列表视图中显示数据库中的项目?

来自分类Dev

如何在列表视图中显示数据库中的项目?

来自分类Dev

我想将列表视图中显示的项目列表存储到android Sqlite数据库

来自分类Dev

如何从 Sqlite 数据库中的多列搜索字符串并在列表视图中返回结果?

来自分类Dev

如何在对象中存储数据并将其保存到SQLite数据库中?

来自分类Dev

如何从数据库中检索数据并将其显示在选择下拉列表中

来自分类Dev

Android在列表视图中设置sqlite数据库值

来自分类Dev

如何在sqlite数据库中根据其名称从可绘制对象获取图像,然后在列表视图中显示它

来自分类Dev

来自android中的sqlite数据库的列表视图中列表顶部的新项目

来自分类Dev

单击列表视图中的项目时如何显示数据库中的数据

来自分类Dev

如何从 Firebase 数据库过滤数据并将其显示到 android recyclerview 中?

来自分类Dev

尝试从数据库中捕获值并将其显示在文本视图中时出错。安卓

来自分类Dev

如何在python的表视图中显示数据库中的数据

来自分类Dev

如何创建数据库并将其填充在sqlite android中?

来自分类Dev

如何在列表视图中单击特定项时从数据库中获取特定列表

来自分类Dev

如何从已经创建的数据库中为 Android 应用程序在列表视图中显示图像?

来自分类Dev

如何从Firebase数据库中获取Android列表视图中的用户名列表?

来自分类Dev

从数据库中获取联系人列表,并将其填充到视图“列表”中

来自分类Dev

无法将 RSS 提要保存到数据库并将其显示在列表视图上

来自分类Dev

使用Android中每个列表项中的删除按钮,删除SQLite数据库填充的列表视图中的项

来自分类Dev

使用Android中每个列表项中的删除按钮,删除由SQLite数据库填充的列表视图中的项

Related 相关文章

  1. 1

    在列表视图中显示sqlite数据库中的数据

  2. 2

    如何在数据库中保存图像并将其显示到MVC 4中的视图中?

  3. 3

    如何在数据库中保存图像并将其显示到MVC 4中的视图中?

  4. 4

    Android Studio,如何从Sqlite数据库中检索数据并将其显示到textview中?

  5. 5

    如何通过单击按钮从sqlite数据库中检索数据并显示在列表视图中

  6. 6

    如何从列表视图中移动数据并将其插入数据库?

  7. 7

    如何从 Firebase 数据库存储中检索数据并将其显示到自定义列表视图中?

  8. 8

    Android:通过单击列表视图上的项目进行导航,并检索数据frm数据库并将其显示在另一个列表视图中

  9. 9

    如何在列表视图中显示数据库中的项目?

  10. 10

    如何在列表视图中显示数据库中的项目?

  11. 11

    我想将列表视图中显示的项目列表存储到android Sqlite数据库

  12. 12

    如何从 Sqlite 数据库中的多列搜索字符串并在列表视图中返回结果?

  13. 13

    如何在对象中存储数据并将其保存到SQLite数据库中?

  14. 14

    如何从数据库中检索数据并将其显示在选择下拉列表中

  15. 15

    Android在列表视图中设置sqlite数据库值

  16. 16

    如何在sqlite数据库中根据其名称从可绘制对象获取图像,然后在列表视图中显示它

  17. 17

    来自android中的sqlite数据库的列表视图中列表顶部的新项目

  18. 18

    单击列表视图中的项目时如何显示数据库中的数据

  19. 19

    如何从 Firebase 数据库过滤数据并将其显示到 android recyclerview 中?

  20. 20

    尝试从数据库中捕获值并将其显示在文本视图中时出错。安卓

  21. 21

    如何在python的表视图中显示数据库中的数据

  22. 22

    如何创建数据库并将其填充在sqlite android中?

  23. 23

    如何在列表视图中单击特定项时从数据库中获取特定列表

  24. 24

    如何从已经创建的数据库中为 Android 应用程序在列表视图中显示图像?

  25. 25

    如何从Firebase数据库中获取Android列表视图中的用户名列表?

  26. 26

    从数据库中获取联系人列表,并将其填充到视图“列表”中

  27. 27

    无法将 RSS 提要保存到数据库并将其显示在列表视图上

  28. 28

    使用Android中每个列表项中的删除按钮,删除SQLite数据库填充的列表视图中的项

  29. 29

    使用Android中每个列表项中的删除按钮,删除由SQLite数据库填充的列表视图中的项

热门标签

归档