【问题标题】:SearchView show Result from SQLITE database to ListViewSearchView 从 SQLITE 数据库显示结果到 ListView
【发布时间】:2018-03-19 02:48:18
【问题描述】:

我想对自定义列表显示药物记录的活动进行搜索。我没有在SearchView上工作过。

我的医学数据库代码:

package com.example.sarhanaashir.wecare.Database_MedInfo;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.util.ArrayList;


public class DatabaseHelperMed extends SQLiteOpenHelper

{
    private static final String Database_Name = "WeCareDatabaseMed";
    private static final int Database_Ver = 1;

    public DatabaseHelperMed(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
    {
        super(context,Database_Name,null,Database_Ver);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase)
    {
        String query = "CREATE TABLE tbl_med(id INTEGER PRIMARY KEY AUTOINCREMENT,MedName TEXT,MedSymptom TEXT)";
        sqLiteDatabase.execSQL(query);
    }


    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1)
    {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS tbl_med");
        this.onCreate(sqLiteDatabase);
    }

    public boolean addNewMedicine(MedicineRecord med_rec)
    {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put("MedName", med_rec.getMed_name() );
        values.put("MedSymptom", med_rec.getMed_sym() );

        db.insert("tbl_med", null, values);
        db.close();

        return true;
    }

    public ArrayList<MedicineRecord> getAllMed()
    {
        SQLiteDatabase db = this.getReadableDatabase();
        ArrayList<MedicineRecord> medi = new ArrayList<>();
        Cursor cursor = db.rawQuery("select * from tbl_med", null);
        if (cursor.moveToFirst())
        {

            while (!cursor.isAfterLast())
            {
                String id = cursor.getString(0);
                String name = cursor.getString(1);
                String sympt = cursor.getString(2);

                medi.add(new MedicineRecord(name,sympt));
                cursor.moveToNext();

            }
        }
        return medi;
    }
    public Cursor searchTasks(SQLiteDatabase db, String searchTxt)

    {
        Cursor cursor;
        String q = "select * tbl_med from  where MedSymptom Like '"+searchTxt+"%'";
        cursor = db.rawQuery(q,null);
        return cursor;
    }
}

SearchView 所在的我的活动:

 package com.example.sarhanaashir.wecare.Database_MedInfo;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.app.SearchManager;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;

import com.example.sarhanaashir.wecare.R;

import java.util.ArrayList;

public class Med_info extends AppCompatActivity {

    private ArrayList<MedicineRecord> med_record;
    private MedicineListAdapter adapter;
    private ListView listView;
    DatabaseHelperMed db;
    SearchView searchView1;


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

        inti();

        searchView1 = (SearchView) findViewById(R.id.SVscrhMed);

        searchView1.setOnQueryTextListener(new OnQueryTextListener()
        {
            @Override
            public boolean onQueryTextSubmit(String qry)
            {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText)

            {
                return true;
            }
        });
    }

    private void inti()
    {
        db = new DatabaseHelperMed(Med_info.this,"WeCareDatabaseMed.db",null,1);
        med_record = new ArrayList<>();
        listView = (ListView) findViewById(R.id.Med_list);
        adapter = new MedicineListAdapter(this, R.layout.med_rec_style, med_record);
        listView.setAdapter(adapter);

        fillmed();

    }

    private void fillmed()
    {
        med_record.clear();
        med_record.addAll(db.getAllMed()); // Getting Medicine from database.
        adapter.notifyDataSetChanged();
    }
}

我的医学记录完美地显示在我的自定义列表中,我唯一想要的是放置一个 searchView 以便用户可以从列表中搜索药物。

【问题讨论】:

  • 你的问题标题和描述完全不同。明确你想要什么。
  • 现在正确吗?我是 StackOverFlow 的新手,很抱歉出现这些问题。
  • “教我怎么做。” -- 这不是 SO 的目的。如果您有需要回答的问题,请来这里。

标签: android sqlite searchview


【解决方案1】:

试试这个代码:

 searchView1.setOnQueryTextListener(new OnQueryTextListener()
        {
            @Override
            public boolean onQueryTextSubmit(String qry)
            {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText)
            {
                adapter.getFilter().filter(newText);
                return true;
            }
        });

【讨论】:

  • 您好,感谢您的回答。请你告诉我,我需要在数据库中创建一个方法吗?就像我上面在代码中写的那样。现在搜索它没有返回任何内容。
  • 我从未在 SearchView 上工作过,并且在互联网上存在非常令人困惑的方法。真的很抱歉,如果你觉得这个问题很愚蠢或什么的。
【解决方案2】:
Try this code:
// DatabaseHelperMed //
final ArrayList<MedicineRecord> medicalRecords = new ArrayList<MedicineRecord>();
public ArrayList<MedicineRecord> getMedicine(String name) {
    try {
        medicalRecords.clear();
        String selectQuery = "SELECT  * FROM tbl_med "+" WHERE MedSymptom LIKE '%" + name + "%'";
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do {
                MedicineRecord medRec = new MedicineRecord();
                medRec.setMed_name(cursor.getString(1));
                medRec.setMed_sym(cursor.getString(2));
                medicalRecords.add(medRec);
            } while (cursor.moveToNext());
        }
        cursor.close();
        db.close();
        return medicalRecords;
    } catch (Exception e) {
        // TODO: handle exception
        Log.e("get_all_contacts", "" + e);
    }
    return medicalRecords;
}
// SearchView
 searchView1.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        DatabaseHelperMed db ;
        db = new DatabaseHelperMed(getApplicationContext());
        ArrayList<MedicineRecord> medRecords = db.getMedicine(newText);
        for (int i = 0; i < medRecords.size(); i++) {
            String name = medRecords.get(i).getMed_name();
            String symp = medRecords.get(i).getMed_sym();
        }
        return false;
    }
});

【讨论】:

  • do-while 条件存在问题,在制作“Medicine Record”对象时,告诉我在“()”中写入 2 个字符串值,但在写入时仍然给出我的错误是因为在我的班级“医学记录”中我已经传递了 2 个字符串,我是否应该再创建一个仅用于搜索目的的班级。
  • 我已经编写了你的​​代码,并且这段代码对我有用。你能告诉我,错误发生在哪里吗?在 db 类或 searchview 中?
  • 在 DatabaseHelperMed 中应用 DO-While 条件以制作医学记录对象时出现错误,即“医学记录(字符串,字符串)无法应用于(字符串)
  • 将此添加到您的模型 MedicineRecord public MedicineRecord(){ }
  • 您可以通过我的电子邮件与我联系,以便我可以将图片发送给您。 sarhan.aashir1@gmail.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多