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

بسته شدن برنامه بعد از جستجو در دیتابیس با حجم بالا (حل شد)

مدیریت گفتگو
MILAD-MB 12 سال پیش
آخرین تغییر: 12 سال پیش

سلام. من یک دیتابیس سنگینی با 2 هزار رکورد دارم. یک قابلیت جستجو براش گذاشتم که وقتی یک کلمه رو مینویسم و دکمه جستجو میزنم برنامه میره در حال جستجو و بعد از چندین ثانیه برنامه میپره بیرون. البته مطمئن هستم که کد رو درست نوشتم چون بعضی وقتا اجرا میشه بعضی وقتا هم بخاطر سنگین بودن دیتابیس کشش نداره برنامه میپره بیرون.

حالا میخوام بدونم راهی هست که جستجو کارشو بهتر انجام بده؟

نظرات

Spirit 12 سال پیش
طبق توصیه های گوگل در زمان استفاده از شبکه ، دیتابیس و ...(سومی یادم رفت) بهتره از thread جداگانه استفاده کنید. (یا AsyncTask)
MILAD-MB 12 سال پیش
SPIRIP جان عزیز من اونو در ترد قرار دادم اما بعد از وارد شدن به اکتیویتی بلافاصله میپره بیرون.
Spirit 12 سال پیش
خب چه خطایی میده؟ بدون خطا که نمیپره بیرون :)
MILAD-MB 12 سال پیش
بزار دوباره امتحان کنم الان
MILAD-MB 12 سال پیش
عزیز امتحان کردم این بار نپرید بیرون اما این ارور رو داد وقتی سرچ کردم ArrayIndexOutOfBoundsException: length=5; index=5
MILAD-MB 12 سال پیش
یعنی رفت در حالت جستجو اما بعد از حدود 15 ثانیه پرید بیرون
سومی فایله : در زمان استفاده از شبکه ، دیتابیس و فایل بهتره از thread جداگانه استفاده کنید.
MILAD-MB 12 سال پیش
ممنون جناب حسین زاده. فقط ببخشید باید این کد رو از کجا بدست بیارم؟ یا در آموزش های استاد هست این موضوع؟
MILAD-MB 12 سال پیش
از دوستان کسی کدی نداره واسه این موضوع؟
طبق گفته خودت جستجو تو ترد جداگانه بدون مشکل انجام میشه. مشکل هم که تو اندیس آرایه هستش که به اندازه دیتا ربطی نداره. خطا تو کدیه که نوشتی. اون بعضی وقتا هم که اجرا میشه وقتاییه که با آخرین آیتمت کار نداری (احتمالا)

پاسخ‌ها 2

MILAD-MB 12 سال پیش

این تمام کدی هستش که من مینویسم. ببینید آیا این کار درسته؟

 

     @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();

نظرات

MILAD-MB 12 سال پیش

بنده مطمئن شدم که کد رو بدرستی نوشتم. چون وقتی کلمه هایی که در دیتابیس کم پیدا میشه رو جستجو میکنم بدرستی انجام میشه اما وقتی مثلا حرف (الف) رو مینویسم و جستجو میکنم برنامه بعد از چندین ثانیه میپره بیرون.

حالا میشه این مشکل رو حل کرد؟ راهنمایی کنید لطفا

نظرات

MILAD-MB 12 سال پیش
ممنون جناب حسین زاده اما من زیاد وارد نیستم چیکار کنم. لطفا اگه میشه راهنمایی کنید
MILAD-MB 12 سال پیش
جناب حسین زاده واقعا ممنونم ازتون. درست شد اما اگه مثلا بنویسم LIMIT 50 فقط 50 تا رکورد رو میشناسه. واسه این مورد باید چیکار کنم؟
MILAD-MB 12 سال پیش
یا شاید این کد رو گذاشتیم که جستجو محدود بشه درسته؟
آره دیگه. باید جستجو محدود بشه. یه بار فقط تعداد رو بدست میاری (بدون محدود کردن) بعد با محدود کردن نتایج یک صفحه یک صفحه به کاربر نشونش میدی
MILAD-MB 12 سال پیش
واقعا ممنون جناب حسین زاده. شما لایق مدیر بودن هستید. نه بخاطر اینکه کار بنده رو راه انداختید. من در خیلی از تاپیک ها شاهد راهنمایی های بسیار تاثیر گذارتون بوده ام. اینشااله که همیشه موفق باشید...

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