Thursday, 8 August 2013

Trying to add search functionality to a ListView backed by Simple cursor adapter (Android)

Trying to add search functionality to a ListView backed by Simple cursor
adapter (Android)

I am trying to implement a text filter to my listview, with the help of an
edit text. I took reference from Using an EditText to filter a
SimpleCursorAdapter-backed ListView. However it does not seem to work in
my case. Following is my code:
Class level Variables:
private SimpleCursorAdapter dataAdapter;
private DBAdapter DBHelper = null;
private static SQLiteDatabase mDb;
Implementation:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.horselist);
DBHelper = new DBAdapter(this);
Chp = new CheckProfile();
Button search = (Button) findViewById(R.id.Search);
// inputSearch = (EditText) findViewById(R.id.editText1);
search.setOnClickListener(sea);
// fillHorse();
Cursor cursor = DBHelper.fetchAllHorses();
startManagingCursor(cursor);
String[] columns = new String[] { DBAdapter.IDX, DBAdapter.Name1,
DBAdapter.Owner1, DBAdapter.Breed1, DBAdapter.IDno1,
};
// the XML defined views which the data will be bound to
int[] to = new int[] { R.id.code, R.id.name, R.id.continent,
R.id.region, R.id.Idno, };
dataAdapter = new SimpleCursorAdapter(this, R.layout.list_layout,
cursor, columns, to, 0);
final ListView listView = (ListView) findViewById(R.id.listView1);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);
listView.setFastScrollEnabled(true);
listView.setTextFilterEnabled(true);
EditText etext = (EditText) findViewById(R.id.editText1);
etext.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
public void beforeTextChanged(CharSequence s, int start, int
count,
int after) {
}
public void afterTextChanged(Editable s) {
SimpleCursorAdapter filterAdapter = (SimpleCursorAdapter)
listView
.getAdapter();
filterAdapter.getFilter().filter(s.toString());
}
});
dataAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
return getDirectoryList(constraint);
}
});
}
The GetDirectoryList function:
public Cursor getDirectoryList(CharSequence constraint) {
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(DBAdapter.DATABASE_TABLE0);
String asColumnsToReturn[] = { DBAdapter.DATABASE_TABLE0 + "."
+ DBAdapter.IDno1 + "," + DBAdapter.DATABASE_TABLE0 + "."
+ DBAdapter.Name1 + "," + DBAdapter.DATABASE_TABLE0 + "."
+ DBAdapter.Owner1 + "," + DBAdapter.DATABASE_TABLE0 + "."
+ DBAdapter.Breed1 + "," + DBAdapter.DATABASE_TABLE0 + "."
+ DBAdapter.IDX };
if (constraint == null || constraint.length() == 0) {
// Return the full list
return queryBuilder.query(mDb, asColumnsToReturn, null, null, null,
null, null);
} else {
String value = "%" + constraint.toString() + "%";
return mDb.query(DBAdapter.DATABASE_TABLE0, asColumnsToReturn,
"Name1 like ? ", new String[] { value }, null, null, null);
}
}
Edit: I came to realise somehow that my log cat output was non functional
at the time I posted this question, now when I came to know of it I have
the following log cat output:
08-08 05:35:01.450: W/Filter(327): An exception occured during
performFiltering()!
08-08 05:35:01.450: W/Filter(327): java.lang.NullPointerException
08-08 05:35:01.450: W/Filter(327): at
com.gallops.SignupList.getDirectoryList(SignupList.java:187)
08-08 05:35:01.450: W/Filter(327): at
com.gallops.SignupList$3.runQuery(SignupList.java:86)
08-08 05:35:01.450: W/Filter(327): at
android.support.v4.widget.CursorAdapter.runQueryOnBackgroundThread(CursorAdapter.java:397)
08-08 05:35:01.450: W/Filter(327): at
android.support.v4.widget.CursorFilter.performFiltering(CursorFilter.java:50)
08-08 05:35:01.450: W/Filter(327): at
android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
08-08 05:35:01.450: W/Filter(327): at
android.os.Handler.dispatchMessage(Handler.java:99)
08-08 05:35:01.450: W/Filter(327): at
android.os.Looper.loop(Looper.java:123)
08-08 05:35:01.450: W/Filter(327): at
android.os.HandlerThread.run(HandlerThread.java:60)
08-08 05:35:01.610: I/System.out(327): Returns else
08-08 05:35:01.610: W/Filter(327): An exception occured during
performFiltering()!
08-08 05:35:01.610: W/Filter(327): java.lang.NullPointerException
08-08 05:35:01.610: W/Filter(327): at
com.gallops.SignupList.getDirectoryList(SignupList.java:187)
08-08 05:35:01.610: W/Filter(327): at
com.gallops.SignupList$3.runQuery(SignupList.java:86)
08-08 05:35:01.610: W/Filter(327): at
android.support.v4.widget.CursorAdapter.runQueryOnBackgroundThread(CursorAdapter.java:397)
08-08 05:35:01.610: W/Filter(327): at
android.support.v4.widget.CursorFilter.performFiltering(CursorFilter.java:50)
08-08 05:35:01.610: W/Filter(327): at
android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
08-08 05:35:01.610: W/Filter(327): at
android.os.Handler.dispatchMessage(Handler.java:99)
08-08 05:35:01.610: W/Filter(327): at
android.os.Looper.loop(Looper.java:123)
08-08 05:35:01.610: W/Filter(327): at
android.os.HandlerThread.run(HandlerThread.java:60)
08-08 05:35:01.620: I/System.out(327): Returns else
08-08 05:35:01.620: W/Filter(327): An exception occured during
performFiltering()!
08-08 05:35:01.620: W/Filter(327): java.lang.NullPointerException
08-08 05:35:01.620: W/Filter(327): at
com.gallops.SignupList.getDirectoryList(SignupList.java:187)
08-08 05:35:01.620: W/Filter(327): at
com.gallops.SignupList$3.runQuery(SignupList.java:86)
08-08 05:35:01.620: W/Filter(327): at
android.support.v4.widget.CursorAdapter.runQueryOnBackgroundThread(CursorAdapter.java:397)
08-08 05:35:01.620: W/Filter(327): at
android.support.v4.widget.CursorFilter.performFiltering(CursorFilter.java:50)
08-08 05:35:01.620: W/Filter(327): at
android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
08-08 05:35:01.620: W/Filter(327): at
android.os.Handler.dispatchMessage(Handler.java:99)
08-08 05:35:01.620: W/Filter(327): at
android.os.Looper.loop(Looper.java:123)
08-08 05:35:01.620: W/Filter(327): at
android.os.HandlerThread.run(HandlerThread.java:60)
08-08 05:35:01.620: I/System.out(327): Yaay
08-08 05:37:11.240: D/SntpClient(61): request time failed:
java.net.SocketException: Address family not supported by protocol
The log cat points to these lines in my code:
08-08 05:46:16.131: W/Filter(362): at
com.gallops.SignupList$3.runQuery(SignupList.java:86)
return getDirectoryList(constraint);
08-08 05:46:16.131: W/Filter(362): at
com.gallops.SignupList.getDirectoryList(SignupList.java:187)
return mDb.query(DBAdapter.DATABASE_TABLE0, asColumnsToReturn,
"Name like ? ", new String[] { value }, null, null,
null);

No comments:

Post a Comment