نتایج جستجو رو صفحه بندی کن
بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
بسته شدن برنامه بعد از جستجو در دیتابیس با حجم بالا (حل شد)
مدیریت گفتگو
آخرین تغییر: 12 سال پیش
سلام. من یک دیتابیس سنگینی با 2 هزار رکورد دارم. یک قابلیت جستجو براش گذاشتم که وقتی یک کلمه رو مینویسم و دکمه جستجو میزنم برنامه میره در حال جستجو و بعد از چندین ثانیه برنامه میپره بیرون. البته مطمئن هستم که کد رو درست نوشتم چون بعضی وقتا اجرا میشه بعضی وقتا هم بخاطر سنگین بودن دیتابیس کشش نداره برنامه میپره بیرون.
حالا میخوام بدونم راهی هست که جستجو کارشو بهتر انجام بده؟
پاسخها 2
این تمام کدی هستش که من مینویسم. ببینید آیا این کار درسته؟
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
db = new Database(this);
edit = (EditText) findViewById(R.id.edit);
rb_sch_name = (RadioButton) findViewById(R.id.rb_sch_name);
rb_sch_matn = (RadioButton) findViewById(R.id.rb_sch_matn);
btn1 = (Button) findViewById(R.id.btn1);
refresh(edit.getText().toString(), "Name");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (rb_sch_name.isChecked()) {
refresh(edit.getText().toString(), "Name");
} else if (rb_sch_matn.isChecked()) {
refresh(edit.getText().toString(), "Matn");
}
}
});
setListAdapter(new AA());
}
});
thread.start();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Intent i = new Intent(Search.this, ActivityContent.class);
i.putExtra("SEA", Sea[position]);
i.putExtra("NAME", Name[position]);
startActivity(i);
}
class AA extends ArrayAdapter<String> {
public AA() {
super(Search.this, R.layout.row_season, Name);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater in = getLayoutInflater();
View row = in.inflate(R.layout.row_season, parent, false);
TextView name = (TextView) row.findViewById(R.id.row_season_name);
name.setText(Name[position]);
return (row);
}
}
private void refresh(String word, String field) {
db.open();
int s = db.Search_count(word, field);
if (edit.getText().toString().equals("")) {
s = 0;
}
Name = new String[s];
Sea = new String[s];
for (int i = 0; i < s; i++) {
Name[i] = db.Search_display(i, 3, word, field);
Sea[i] = db.Search_display(i, 1, word, field);
}
setListAdapter(new AA());
db.close();
نظرات
بنده مطمئن شدم که کد رو بدرستی نوشتم. چون وقتی کلمه هایی که در دیتابیس کم پیدا میشه رو جستجو میکنم بدرستی انجام میشه اما وقتی مثلا حرف (الف) رو مینویسم و جستجو میکنم برنامه بعد از چندین ثانیه میپره بیرون.
حالا میشه این مشکل رو حل کرد؟ راهنمایی کنید لطفا
نظرات
ممنون جناب حسین زاده اما من زیاد وارد نیستم چیکار کنم. لطفا اگه میشه راهنمایی کنید
جناب حسین زاده واقعا ممنونم ازتون. درست شد اما اگه مثلا بنویسم LIMIT 50 فقط 50 تا رکورد رو میشناسه. واسه این مورد باید چیکار کنم؟
یا شاید این کد رو گذاشتیم که جستجو محدود بشه درسته؟
آره دیگه. باید جستجو محدود بشه. یه بار فقط تعداد رو بدست میاری (بدون محدود کردن) بعد با محدود کردن نتایج یک صفحه یک صفحه به کاربر نشونش میدی
واقعا ممنون جناب حسین زاده. شما لایق مدیر بودن هستید. نه بخاطر اینکه کار بنده رو راه انداختید. من در خیلی از تاپیک ها شاهد راهنمایی های بسیار تاثیر گذارتون بوده ام. اینشااله که همیشه موفق باشید...
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات