آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

علی  9 سال پیش  9 سال پیش
+1 0

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

مثل دیکشنری-یعنی مثلا اگه تایپ کرد 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

 

0 0
دوست عزیز اون چیزی که شما میخوای اسمش AutoCompleteTextView هست, دوباره سرچو با این موضوع شروع کنید (9 سال پیش)
0 0
ولی من هر چی سعی کردم،همه با addTextChangedListener اینکارو کردن! لینک و لینک و لینک (9 سال پیش)
0 0
ولی من هر چی سرچ کردم،همه با addTextChangedListener اینکارو کردن! لینک و لینک و لینک (9 سال پیش)
0 0
AutoCompleteTextView کاری با لیست ویو نداره , لینک (9 سال پیش)
0 0
خیلی ها چنین مشکلی داشتند اینو دیدید لینک (9 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
RoOTmAn  9 سال پیش
+3 0

سلام...

راه های بهتری هم هست واسه چیزی که میخواین ، ولی اگه از همین روش میخواین استفاده کنین،متد ()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);

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