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

جستجو در دیتابیس داخلی

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

سلام . من یه course به صورت زیر نوشتم

و یه متد به صورت زیر تعریف کردم , و اون رو تو addTextChangedListener صدا زدم با ورودی ایدیت تکست . ولی متاسفانه بعد از تایپ در ادیت تکست فورس کلوز میده . منون میشم راهنمایی ککنید

 public void ref(String w) {
        db.open();

        for (int k = 0; k < 4; k++) {
            StructNote h = new StructNote();

            h.name = db.Display2(k, 1, "Name", w);


            aray.add(h);

        }

        db.close();
        adapter.notifyDataSetChanged();
    }
  public String Display2(int row, int col, String field, String word) {
        Cursor cu;
        cu = mydb.rawQuery("select * from content where " + field + " Like '%" + word + "%'", null);
        cu.moveToPosition(row);
        String s = cu.getString(col);
        return s;
    }

نظرات

Spirit 10 سال پیش
Cursor رو مثل آرایه در نظر بگیرید که از صفر index گذاری میشه، نتیجه Query شما ۳ ردیف هست، یعنی صفر یک دو ، ولی تو حلقه for شما از ۰ تا کوچکتر از ۴ نوشتین که شامل صفر یک دو سه میشه، پس اون ۴ رو بکنید ۳ تا خطا رفع بشه.
Spirit 10 سال پیش
البته این روش شما درست نیست چون ممکنه در یه Query دیگه شما تنها ۱ ردیف رو دریافت کنید و باز هم همین خطا رو دریافت کنید. باید از do while و moveToFirst و moveToNext استفاده کنید یا روشهای دیگه.
116580 10 سال پیش
ممنون بابت پاسخ گویی ولی درست نشد . دیتابیس من کلن 4 row داره . پس فکر کنم اون 4 درست باشه؟
حمید زمانی 10 سال پیش
این چیزی که تو لاگ داره نشون میده میگه کلا ۳ تا row دارین و شما درخواست row چهارم رو کردین و چون وجود نداره کرش کرده
116580 10 سال پیش
ممنون از پاسخ . ولی 4 رو داره . من تو فراخونی عادیش مشکل ندارم . با همین حلقه فور فراخونی میشه و تو لیست ویو نمایش داده میشه . ولی جستجو همین که تو باکس تایپ میکنم فور کلوز میده
HoCoder 10 سال پیش
اساتید درست میگن دوست من در آخر متد cusor رو حتما close کنید
Spirit 10 سال پیش
۴ تا ردیف داشتن دلیل نمیشه که Query شما هم همون ۴ تا رو برگردونه، بهرحال خطا مربوط به اون چیزی که هست من و جناب زمانی اشاره کردیم یعنی logcat اینو میگه، دیتابیس رو بکشید بیرون با یه برنامه مدیریت دیتابیس Query تون رو تست کنید.
116580 10 سال پیش
تشکر . خیلی عجیبه :| . همین الان کوءری سرچ رو تست کردم بخوبی کار میکنه . این طرز کدنویسی برای جستجو صحیح هست ؟ شکل صحیش و معمولش به چه شکله؟

پاسخ‌ها 2

HoCoder 10 سال پیش

من از این متد برای سرچ تو بانک استفاده میکنم امیدوارم این نمونه کد بدردتون بخوره

  public static void search( final String wordSearch ) {
new Thread( new Runnable() {


@Override
public void run() {
G.storySearch.clear();
String query = "select * from " + TABLE_NAME + " where " + COLUMN_NAME + " like '%" + wordSearch + "%' group by " + COLUMN_NAME;
Cursor cursor = G.database.rawQuery( query , null );
for ( int i = 0 ; i < cursor.getCount() ; i++ ) {
cursor.moveToPosition( i );
StructureStory story = new StructureStory();
story.name = cursor.getString( COL_NAME );
story.favorite = cursor.getInt( COL_FAVORITE );
story.page = cursor.getInt( COL_PAGE );

G.storySearch.add( story );
}

}
} ).start();
}

نظرات

116580 10 سال پیش

سپاس فراواان . متد seach رو تو addTextChangedListener با ورودی word.getText().toString() وارد کردم ولی وقتی تو ایدیت تکست چیزی مینویسم هیچ اتفاقی نمیفته و حته فورس کلوز هم نمیده . مشکل از چیه؟

 

(متد سررچ رو بیرون از addTextChangedListener صدا میزنم اطلاعات رو نمایش میده)

نظرات

HoCoder 10 سال پیش
فکر کنم از AsyncTask برای سرچ استفاده کنید و سرچ رو بعد از اینکه کلمه رو کامل وارد کردین نتایج خیلی بهتری بگیرین
116580 10 سال پیش
بوسیله همین addTextChangedListener نمیشه ؟ ممنون میشم راهنمایی کنید

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