1

私は正常に動作する次のコードを持っています..検索機能を追加したいです...何をどこですべきか教えてください

MyDatabase.java

package com.example.test4;

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

public class MyDatabase {
    public static final String MY_DB2 = "testdb5";
    MyHelper mh;
    Context myCon;
    SQLiteDatabase sdb;

    public MyDatabase(Context c) {
        myCon = c;
        mh = new MyHelper(myCon, MY_DB2, null, 1);
    }

    public void open() {
        sdb = mh.getWritableDatabase();
    }

    public class MyHelper extends SQLiteOpenHelper {

        public MyHelper(Context context, String name, CursorFactory factory,
                int version) {
            super(context, name, factory, version);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("create table students(_id integer primary key, "
                    + "s_name text, " + "s_attendance text, "
                    + "s_homework text, " + "s_participation text, "
                    + "s_quiz integer, " + "s_test integer, "
                    + "s_comment text, " + "p_email text);");
            Log.d("1", "Table Created");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub

        }

    }

    public void StudentsInsert(ContentValues cv) {
        sdb.insert("students", null, cv);
    }

    public Cursor getStudents() {
        Cursor c = sdb.query("students", null, null, null, null, null, null);
        return c;
    }

    public Cursor filterStudents() {
        // SQLiteDatabase db = mh.getReadableDatabase();

        Cursor c = sdb.query("students", new String[] { "s_name",
                "s_attendance", "s_homework", "s_participation", "s_quiz",
                "s_test", "s_comment", "p_email" }, "s_name like %a%", null,
                null, null, null);
        return c;

    }

}

filterStudents() で何か間違ったことをしていると思います...

これは私が他のファイルに持っているものです

EditText myFilter = (EditText) findViewById(R.id.myFilter);
        myFilter.addTextChangedListener(new TextWatcher() {

         public void afterTextChanged(Editable s) {
         }

         public void beforeTextChanged(CharSequence s, int start, 
           int count, int after) {
         }

         public void onTextChanged(CharSequence s, int start, 
           int before, int count) {
          sca.getFilter().filter(s.toString());
         }
        });

        sca.setFilterQueryProvider(new FilterQueryProvider() {
               public Cursor runQuery(CharSequence constraint) {
                   return mdb.filterStudents();
               }
           });
4

3 に答える 3

0

私はこの方法を使用していますが、あなたにとって役立つかもしれません。

リストビューにデータを設定するためのアダプターを作成します。

データを表示するためのリストビューを作成します。

myFilter.addTextChangedListener(new TextWatcher() {         
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count){                                
      myadapter.getFilter().filter(s);
      listview.setAdapter(myadapter);    
      myadapter.notifyDataSetChanged(); 
}

MyDatabase mdb = new MyDatabase(this);
//set adapter as per requirement this is sample.
myadapter= new MySimpleCursorAdapter(this, R.layout.list_search, m_curContacts, fields, new int []{R.id.textView1,R.id.imageView1});
    myadapter.setFilterQueryProvider(new FilterQueryProvider() {            
    public Cursor runQuery(CharSequence constraint) {
        //check here cursor is getting any result or not.if not then problem with your query.   
            return mdb.filterStudents();
    }

});

"'%"+ value+ "%'"データベースでこの方法を使用する必要があります。

于 2013-03-22T04:52:41.457 に答える
0

私は自分の問題の解決策を見つけました..これを共有したいと思います..

私のコードは次のようになります

EditText myFilter = (EditText) findViewById(R.id.myFilter);
        myFilter.addTextChangedListener(new TextWatcher() {

         public void afterTextChanged(Editable s) {
         }

         public void beforeTextChanged(CharSequence s, int start, 
           int count, int after) {
         }

         public void onTextChanged(CharSequence s, int start, 
           int before, int count) {
          sca.getFilter().filter(s.toString());
         }
        });

        sca.setFilterQueryProvider(new FilterQueryProvider() {
               public Cursor runQuery(CharSequence constraint) {
                   return mdb.fetchMyValues(constraint.toString());
               }
           });

データベースファイルに次のコードを追加しました

public Cursor fetchMyValues(String inputText) {

        String DATABASE_TABLE="students";
        return sdb.query(DATABASE_TABLE, new String[] {"_id", "s_name",
                "s_attendance", "s_homework", "s_participation", "s_quiz",
                "s_test", "s_comment", "p_email"}, 
                  "s_name like '%" + inputText +"%'"  , null, null, null, null);}

今、私の検索はうまくいきます...

ありがとうございました

于 2013-03-22T15:38:41.147 に答える
0

フィルター文字列を引用符で囲んでみてください。つまり、代わりに:

like %a%

成功する:

like '%a%'

二重引用符 (") はそのままにして、フィルター文字列を一重引用符で囲みます。

于 2013-03-22T03:27:08.230 に答える