بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مشکل با فیلتر کردن دیتابیس در List View

مدیریت گفتگو
علی 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام.من یک لیست ویو دارم که آیتم هاشو از رو دیتابیس میخونه-میخوام براش یک سرچ بذارم که کاربر هرچی تایپ کرد همون لحظه آیتم های دیتابیس بر اساس اون چیزی که کاربر تایپ میکنه نمایش داده بشه

مثل دیکشنری-یعنی مثلا اگه تایپ کرد he  تموم فیلد هایی که با he شروع میشن رو بیاره-مثلا hello

مشکلی که دارم اینه که وقتی تو EditText چیزی تایپ میکنم-کرش میکنه

            //فیلد ها
MyDataBase = new MyDatabase(this);
mydb = MyDataBase.getReadableDatabase();

fillFromDb() //با شروع اکتیویتی اول از همه این متد اجرا میشه


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


 
//برای نمایش 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();
}


//سرچ در دیتابیس و نمایش در لیست ویو
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();
}

روی ()searchdatabase کرش میکنه-و پیغام لوگ کت:

 
attempt to re-open an already-closed object

 

نظرات

Amir.z 11 سال پیش
دوست عزیز اون چیزی که شما میخوای اسمش AutoCompleteTextView هست, دوباره سرچو با این موضوع شروع کنید
Amir.z 11 سال پیش
AutoCompleteTextView کاری با لیست ویو نداره , لینک
hamcalas 11 سال پیش
خیلی ها چنین مشکلی داشتند اینو دیدید لینک

پاسخ‌ها 1

RoOTmAn 11 سال پیش

سلام...

راه های بهتری هم هست واسه چیزی که میخواین ، ولی اگه از همین روش میخواین استفاده کنین،متد ()searchdatabase باید اینجوری باشه:

  public void searchdatabase() {
        mydb = MyDataBase.getReadableDatabase();
        Cursor cursor1 = null;
        itemLists.clear();
        cursor1 = mydb.rawQuery(" SELECT * FROM test WHERE title Like '%" + SearchResult + "%' ", null);
        while (cursor1.moveToNext())
        {
            StructNote test1 = new StructNote();
            test1.title = cursor1.getString(cursor1.getColumnIndex("title"));
            itemLists.add(test1);
        }
        cursor1.close();
        mydb.close();
        adapter.notifyDataSetChanged();
    }

احتمالا باید مشکل حل شه...

  + اگه میخواین مثل سرچ دیکشنری عمل کنه،باید کوئری به این شکل باشه:

 cursor1 = mydb.rawQuery(" SELECT * FROM test WHERE title Like '" + SearchResult + "%' ", null);

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .