master94
چهارشنبه 17 تیر 1394, 18:51 عصر
سلام...
من یک لیست ویو دارم که آیتم هاش از روی دیتابیس پر میشن،میخوام یک سرچ داشته باشه که کاربر هرچی وارد کرد فیلد هایی از دیتابیس که اون حروف رو دارن نمایش داده بشه
یعنی دقیقا شبیه دیکشنری،مثلا وقتی تایپ کرد he ، تموم چیزایی که با He شروع شدن نمایش داده بشه،مثل Hello
مشکلی که هست وقتی توی EditText (سرچ) ، چیزی تایپ میکنم سریع کرش میکنه! از صبح دارم سرچ میکنم و هر مدلی تست میکنم جواب نمیده،ممنون میشم راهنماییم کنید
اول از همه :
شروع اکتیویتی(قبل از سرچ) رو با 20 آیتم اول از دیتابیس پر کردم،اینجوری:
private void fillFromDb() { itemLists.clear();
Cursor cursor = mydb.rawQuery("select * from test order by title limit 0,20 ", null);
while (cursor.moveToNext()) {
StructNote test1 = new StructNote();
test1.title = cursor.getString(cursor.getColumnIndex("title"));
itemLists.add(test1);
}
cursor.close();
mydb.close();
adapter.notifyDataSetChanged();
}
بعد یک EditText تعریف کردم که کاربر هر چی وارد کرد،کل دیتابیس رو چک کنه و فیلد هایی که اون حروف (حروف تایپ شده کاربر) رو داره رو نمایش بده...
edtTextSRCH.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
SearchResult = edtTextSRCH.getText().toString();
searchdatabase();
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
@Override
public void afterTextChanged(Editable arg0) {}
});
}
و متد سرچ : (وقتی این متد رو کامنت میکنم دیگه کرش نمیکنه)
public void searchdatabase() { Cursor cursor = null;
itemLists.clear();
cursor = mydb.rawQuery(" SELECT * FROM test WHERE title Like '%" + SearchResult + "%' ", null);
while (cursor.moveToNext())
{
StructNote test1 = new StructNote();
test1.title = cursor.getString(cursor.getColumnIndex("title"));
itemLists.add(test1);
}
cursor.close();
mydb.close();
adapter.notifyDataSetChanged();
}
و اروری هم که logcat میده: attempt to re-open an already-closed object
ممنون...
من یک لیست ویو دارم که آیتم هاش از روی دیتابیس پر میشن،میخوام یک سرچ داشته باشه که کاربر هرچی وارد کرد فیلد هایی از دیتابیس که اون حروف رو دارن نمایش داده بشه
یعنی دقیقا شبیه دیکشنری،مثلا وقتی تایپ کرد he ، تموم چیزایی که با He شروع شدن نمایش داده بشه،مثل Hello
مشکلی که هست وقتی توی EditText (سرچ) ، چیزی تایپ میکنم سریع کرش میکنه! از صبح دارم سرچ میکنم و هر مدلی تست میکنم جواب نمیده،ممنون میشم راهنماییم کنید
اول از همه :
شروع اکتیویتی(قبل از سرچ) رو با 20 آیتم اول از دیتابیس پر کردم،اینجوری:
private void fillFromDb() { itemLists.clear();
Cursor cursor = mydb.rawQuery("select * from test order by title limit 0,20 ", null);
while (cursor.moveToNext()) {
StructNote test1 = new StructNote();
test1.title = cursor.getString(cursor.getColumnIndex("title"));
itemLists.add(test1);
}
cursor.close();
mydb.close();
adapter.notifyDataSetChanged();
}
بعد یک EditText تعریف کردم که کاربر هر چی وارد کرد،کل دیتابیس رو چک کنه و فیلد هایی که اون حروف (حروف تایپ شده کاربر) رو داره رو نمایش بده...
edtTextSRCH.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
SearchResult = edtTextSRCH.getText().toString();
searchdatabase();
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
@Override
public void afterTextChanged(Editable arg0) {}
});
}
و متد سرچ : (وقتی این متد رو کامنت میکنم دیگه کرش نمیکنه)
public void searchdatabase() { Cursor cursor = null;
itemLists.clear();
cursor = mydb.rawQuery(" SELECT * FROM test WHERE title Like '%" + SearchResult + "%' ", null);
while (cursor.moveToNext())
{
StructNote test1 = new StructNote();
test1.title = cursor.getString(cursor.getColumnIndex("title"));
itemLists.add(test1);
}
cursor.close();
mydb.close();
adapter.notifyDataSetChanged();
}
و اروری هم که logcat میده: attempt to re-open an already-closed object
ممنون...