2013-03-22 58 views
1

我有下面的代码工作正常。我婉添加搜索功能......你能告诉我该怎么做何如何使搜索工作在Android的

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(); 
       } 
      }); 

回答

0

我已经找到了解决我的问题。我想和大家分享这个..

我的代码看起来像这样

和我的数据库文件中添加以下代码

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);} 

现在我搜索的工作好...

谢谢

0

尝试在过滤器字符串周围加上引号。即,代替:

like %a% 

让它:

like '%a%' 

保持你的双引号(“)现在的样子,但过滤字符串两边添加单引号

+0

更改只有报价没有为我工作 – Barlet 2013-03-22 15:40:38

+0

哦,不改变报价。添加到引号。在你的双引号内:像%a%我想让你改变它:像'%a%'。最终,这就是你所做的。 – Dave 2013-03-22 19:37:36

+0

其实我没有改变..我加了..当我这样做的时候程序崩溃了...无论如何谢谢你的尝试 – Barlet 2013-03-23 11:53:07

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+ "%'"

+0

谢谢你的发帖,但是我还是不想让它发挥作用! 你想让我把完整的代码放到Database.java中吗? – Barlet 2013-03-22 10:29:52

+0

分享你的问题 – Harshid 2013-03-22 10:30:31

+0

MyDatabase mdb = new MyDatabase(this); - >给我一个错误在(;)红色下划线 myadapter.setFilterQueryProvider(new FilterQueryProvider()--->在这一行是其他错误 – Barlet 2013-03-22 10:36:22