ورود

View Full Version : مشکل با سرچ در بانک اطلاعاتی sqlite



majnoon110
یک شنبه 15 تیر 1393, 13:13 عصر
سلام دوستان عزیز و اساتید گرامی
من یک بانک اطلاعاتی sqlite ایجاد کردم
در صفحه ی اصلی کاربر داخل یک edittext یک کلمه ( نام کاربر مورد نظر) رو برای جستجو وارد میکنه و بعد از کلیک روی دکمه ی سرچ، اون کلمه با intent به یک اکتیویتی دیگه فرستاده میشه و اونجا میخوام عملیات سرچ رو انجام بدم

وقتی مقدار سرچ خالی هست مشکلی نداره و همه ی مقادیر رو در لیست ویو نمایش میده، اما وقتی یک کلمه ای رو وارد میکنم خطا میگیره

این هم از کدهام لطفا راهنمایی کنید:

کد کلاس کمکی برای تابع سرچ:


public String search(String se, int row,int field) {

Cursor cu=db.rawQuery("select * from tbln where name like '%" +se+ "%'", null);

cu.moveToPosition(row);
String ct=cu.getString(field).toString();
return ct;



}


این هم هنگام فراخوانی


Bundle exu=getIntent().getExtras();
bnd=exu.getString("edt");

dbh.open();
int count = dbh.count();
names=new String[count];
ids=new int[count];

for(int j=0;j<count;j++){
names[j]=dbh.search(bnd,j,1)+"\n"+dbh.search(bnd,j,2);
}

lvs.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names));

dbh.close();

poorman
یک شنبه 15 تیر 1393, 13:53 عصر
سلام

مشکل شما از این خط کد هست

cu.moveToPosition(row);

وقتی جستجو میکنید دیگه همه سطرها توی cursor نیست، بنابراین شما نمیتونین بگید cursor بره به سطر فلان

باید اول چک کنید ببینید چند تا سطر برگشت داده شده، بعد طبق همون دریافت کنید

به جای اینکه توی یک حلقه تابع رو فراخوانی کنید، یک آرایه رو از تابع برگشت بدید

majnoon110
یک شنبه 15 تیر 1393, 14:06 عصر
من چند روزه که شروع به برنامه نویسی اندروید کردم!
امکانش هست که من رو از طریق یه مثال راهنمایی کنید که بتونم بفهمم چیکار باید بکنم؟

poorman
یک شنبه 15 تیر 1393, 14:20 عصر
توی این تاپیک آموزش کار با دیتابیس موجود هست

از روش خوندن اطلاعات از cursor توی این تاپیک استفاده کنید مشکلتون حل میشه

http://barnamenevis.org/showthread.php?441406-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-SQLite-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D8%AF%D9%88%D9%86-%D9%86%DB%8C%D8%A7%D8%B2-%D8%A8%D9%87-%DA%A9%D9%84%D8%A7%D8%B3-DataBaseHelper

majnoon110
یک شنبه 15 تیر 1393, 15:03 عصر
من برنامه رو به این شکل تغییر دادم اما باز هم مشکل هست!!
سه تا متغیر در یک کلاس عمومی تعریف کردم و تابع سرچ رو به صورت زیر تغییر دادم



public void search(String se) {

Cursor cu=db.rawQuery("select * from tbln where name like '%"+se +"%'", null);

cn = new String[cu.getCount()];
int i = 0;
if(cu.moveToFirst()){
do{
Temp.ID3[i] = cu.getInt(0);
Temp.NAME3[i] = cu.getString(1);
Temp.FAMILY3[i] = cu.getString(2);
i++;
}
while(cu.moveToNext());
}
cu.close();

}


و هنگام فراخوانی:



public void refresh()
{
Bundle exu=getIntent().getExtras();
bnd=exu.getString("edt").toString();
dbh.open();
dbh.search(bnd);
dbh.close();
ss=Temp.NAME3[0];

txt.setText(ss);

}

poorman
یک شنبه 15 تیر 1393, 15:11 عصر
قبل از اینکه مقادیر cursor رو توی آرایه بریزید باید آرایه رو به اندازه تعداد سطرها فضا بدید بهش

public void search(String se) {

Cursor cu=db.rawQuery("select * from tbln where name like '%"+se +"%'", null);

Temp.ID3 = new String[cu.getCount()];
Temp.NAME3 = new String[cu.getCount()];
Temp.FAMILY3 = new String[cu.getCount()];
int i = 0;
if(cu.moveToFirst()){
do{
Temp.ID3[i] = cu.getInt(0);
Temp.NAME3[i] = cu.getString(1);
Temp.FAMILY3[i] = cu.getString(2);
i++;
}
while(cu.moveToNext());
}
cu.close();

}


اگر باز هم خطا گرفتید، متن خطایی رو که توی logCat نشون میده رو بذارید تا ببینم مشکل از کجاست

majnoon110
یک شنبه 15 تیر 1393, 15:23 عصر
یک تشکر کافی نیست واقعا
خدا خیرتون بده:قلب:

مشکلم در همین بود که به آرایه ها فضا به اندازه ی سطرهای انتخاب شده نمیدادم!