انجام یک متد و سپس انجام متد دیگر
دوستان من دو متد زیر هم نوشتم و می خوام ابتدا متد اول به طور کامل انجام بشه سپس بره متد دوم ولی همزمان که متد اول اجرا میشه میره متد دوم
get_Key(G.tManager.getDeviceId());
get_album(DatabaseOpenHelper.mobile_id, DatabaseOpenHelper.key);
با اینکار وقتی میره متد دوم null برمیگردونه ؟
لطفا راهنمایی کنید؟!








منظورتون از sleep همون ترد دیگه
Thread m = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(3000); // Do some stuff } catch (Exception e) { e.getLocalizedMessage(); } } });

من الان این کار رو به این صورت اجام دادم ولی درست نیست جواب نمیده بازم مثل قبله
get_Key(G.tManager.getDeviceId());
Thread closeActivity = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
get_album(DatabaseOpenHelper.mobile_id, DatabaseOpenHelper.key);
} catch (Exception e) {
e.getLocalizedMessage();
}
}
});
closeActivity.start();

سلام .
می تونید از کلاس CountDownTimer استفاده کنید. که برای اینکار بهترین هستش.
CountDownTimwer countDownTimer = new CountDownTimer(30000, 1000) { public void onTick(long millisUntilFinished) { //Inja mituni kari k mikhay o anjam bedi } public void onFinish() { //vaghti tamum shod in method anjam mishe } }.start();

توی این موقعیت،باید از Design Pattern (الگوی طراحی) استفاده کنید.
گاهی اوقات،حالتی مثه این موقعیتی که شما بهش برخوردین،براتون پیش میاد که یه متد باید دقیقا بعد از یه متد دیگه اجرا بشه و از طرفی شما نمیدونید متد اول،چقد زمان لازم داره تا اجراش تموم شه و حتی خروجی متد اول باید توی متد دوم استفاده بشه.پس استفاده از این روشی (ایجاد تاخیر زمانی) که شما استفاده کردین،راه حل خوبی برای این مسئله نیست.
البته روال عادی برنامه های جاوا به این صورته که کدها دقیقا خط به خط،پشت سرهم اجرا میشن(برنامه نویسی همزمان) مگر اینکه از برنامه نویسی غیرهمزمان استفاده بشه که استفاده از ترد این کارو ممکن میکنه.حالا متد های شمام هر کدومش توی یه ترد مجزا داره اجرا میشه و این باعث میشه که دیگه برنامه، طبق روال همیشگی برنامه هایی که قبلا بدون ترد می نوشتین،منتظر اتمام متد اول نمونه و متد دوم رو هم بدون اتمام متد اول اجرا میکنه.
به هر حال راه حل درست اینه که از الگوی طراحی callback یا همون لیسنری که استاد درس دادن استفاده کنید.

اینم یه مثال ساده برای درک بهتر مسئله و استفاده از روش callback برای کار با کتابخونه Volley :
requestData(String url, final OnDownloadListener listener) {
StringRequest request = new StringRequest(url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (listener != null) {
listener.onDownloadComplete();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError ex) {
}
});
RequestQueue queue = Volley.newRequestQueue(MyApp.context);
queue.add(request);
}
اینم اینترفسی که باید تعریف کنید:
public interface OnDownloadListener {
void onDownloadComplete();
}
البته این متد باید با توجه به نیازتون پارامترهای ورودی هم داشته باشه...
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .