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

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

116580  10 سال پیش  10 سال پیش
0 0

سلام . من یه 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;
    }
+1 0
Cursor رو مثل آرایه در نظر بگیرید که از صفر index گذاری میشه، نتیجه Query شما ۳ ردیف هست، یعنی صفر یک دو ، ولی تو حلقه for شما از ۰ تا کوچکتر از ۴ نوشتین که شامل صفر یک دو سه میشه، پس اون ۴ رو بکنید ۳ تا خطا رفع بشه. (10 سال پیش)
+1 0
البته این روش شما درست نیست چون ممکنه در یه Query دیگه شما تنها ۱ ردیف رو دریافت کنید و باز هم همین خطا رو دریافت کنید. باید از do while و moveToFirst و moveToNext استفاده کنید یا روشهای دیگه. (10 سال پیش)
0 0
ممنون بابت پاسخ گویی ولی درست نشد . دیتابیس من کلن 4 row داره . پس فکر کنم اون 4 درست باشه؟ (10 سال پیش)
+1 0
این چیزی که تو لاگ داره نشون میده میگه کلا ۳ تا row دارین و شما درخواست row چهارم رو کردین و چون وجود نداره کرش کرده (10 سال پیش)
0 0
ممنون از پاسخ . ولی 4 رو داره . من تو فراخونی عادیش مشکل ندارم . با همین حلقه فور فراخونی میشه و تو لیست ویو نمایش داده میشه . ولی جستجو همین که تو باکس تایپ میکنم فور کلوز میده (10 سال پیش)
0 0
اساتید درست میگن دوست من در آخر متد cusor رو حتما close کنید (10 سال پیش)
+2 0
۴ تا ردیف داشتن دلیل نمیشه که Query شما هم همون ۴ تا رو برگردونه، بهرحال خطا مربوط به اون چیزی که هست من و جناب زمانی اشاره کردیم یعنی logcat اینو میگه، دیتابیس رو بکشید بیرون با یه برنامه مدیریت دیتابیس Query تون رو تست کنید. (10 سال پیش)
0 0
تشکر . خیلی عجیبه :| . همین الان کوءری سرچ رو تست کردم بخوبی کار میکنه . این طرز کدنویسی برای جستجو صحیح هست ؟ شکل صحیش و معمولش به چه شکله؟ (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
HoCoder  10 سال پیش
+3 0

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

  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 سال پیش
0 0

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

 

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

+1 0
فکر کنم از AsyncTask برای سرچ استفاده کنید و سرچ رو بعد از اینکه کلمه رو کامل وارد کردین نتایج خیلی بهتری بگیرین (10 سال پیش)
0 0
بوسیله همین addTextChangedListener نمیشه ؟ ممنون میشم راهنمایی کنید (10 سال پیش)

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