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

انجام یک متد و سپس انجام متد دیگر

Shadow  7 سال پیش  7 سال پیش
0 0

دوستان من دو متد زیر هم نوشتم و می خوام ابتدا متد اول به طور کامل انجام بشه سپس بره متد دوم ولی همزمان که متد اول اجرا میشه میره متد دوم

get_Key(G.tManager.getDeviceId());
get_album(DatabaseOpenHelper.mobile_id, DatabaseOpenHelper.key);

با اینکار وقتی میره متد دوم null برمیگردونه ؟

لطفا راهنمایی کنید؟!

+1 0
آیا در متد اول از Thread استفاده کردید؟ (7 سال پیش)
0 0
نه استفاده نکردم ولی اگه منظورتون امتحان کردنه چرا امتحان کردم و جواب نداده (7 سال پیش)
+2 0
احتمالا از ترد استفاده میشه ! حالا شاید کلاسی دارید یا متدی یا لایبری استفاده کردید که ترد داره ، میتونید لاگ بزارید خط به خطر رو و چک کنید مثلا برای متد اول لاگ های سبز و برای متد دوم لاگ های قرمز و ببیدید از کجا به بعد قرمز ها بین سبز ها دیده میشه ، در ساده ترین حالت هم میتونید متد دوم رو داخل متد اول برازید و در اآخرین خط (7 سال پیش)
0 0
من تویه یکی از پروژه هام یه همچین مشکلی داشتم بعدش فهمیدم که مشکل استفاده از کتابخونه volley هستش که به صورت همزمان کدهاش اجرا میشه. (7 سال پیش)
0 0
دقیقا مشکل منم همیه منم از کتابخونه volley استفاده می کنم و همزمان با هم این دو متد انجام میشن شما چجوری حلش کردین FSR عزیز (7 سال پیش)
0 0
از دو روش میشه استفاده کرد 1) اولویت بندی اجرا (فوری و..) 2) استفاده از sleep من خودم از روش دوم استفاده کردم. (7 سال پیش)
0 0
می تونید از asynctask استفاده کنید ٬ متد اولی را از طریق asynctask اجرا می کنید من قبل استفاده کردم ولی الان با گوشیم اگر حل نشد بکید براتون قرار بدم و..... البته یک نمونه هم ایشان مثال زدند لینک (7 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
Shadow  7 سال پیش
0 0

منظورتون از sleep همون ترد دیگه

 
Thread m = new Thread(new Runnable() {
  @Override
  public void run() {
    try {
      Thread.sleep(3000);
      // Do some stuff
    } catch (Exception e) {
      e.getLocalizedMessage();
    }
  }
});
0 0
بله .ولی به نظر من هر دو روش اصولی نیستن ، من هم تویه اینترنت چیز درست و حسابی پیدا نکردم اگه دوستان اطلاعاتی تویه این زمینه دارن ممنون میشم راهنمایی کنن. (7 سال پیش)
0 0
من خودم از post.delay هم استفاده کردم (7 سال پیش)
پاسخ به سوال 
Shadow  7 سال پیش
0 0

من الان این کار رو به این صورت اجام دادم ولی درست نیست جواب نمیده بازم مثل قبله

 
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();
+1 0
از Thread استفاده نکنید از متد pos که در بالا گفتم استفاده کنید چون اینطوری خیلی سخت میشه تشخیص داد کدوم متد در حال اجرا هستش پیشنهاد میکنم بهتون داخل هر متد یه لوگ هم بنویسید تا بهتر متوجه شید مشکل از کجاست. (7 سال پیش)
0 0
ممنون با post.delay درست شد و کار می کنه (7 سال پیش)
پاسخ به سوال 
مهراد  7 سال پیش
+2 0

سلام .

می تونید از کلاس 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();
0 0
میشه بیشتر توضیح بدید ؟ من یه چیز میخوام که با کتابخونه volley هماهنگ باشه وگرنه این روش با روش post.delay تفاوتی نداره (7 سال پیش)
پاسخ به سوال 
sami  7 سال پیش
+1 0

توی این موقعیت،باید از Design Pattern (الگوی طراحی) استفاده کنید.

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

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

به هر حال راه حل درست اینه که از الگوی طراحی callback یا همون لیسنری که استاد درس دادن استفاده کنید.

پاسخ به سوال 
sami  7 سال پیش
+4 0

اینم یه مثال ساده برای درک بهتر مسئله و استفاده از روش 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();
}
 
 

البته این متد باید با توجه به نیازتون پارامترهای ورودی هم داشته باشه...

+1 0
من قبلا از این روش استفاده می کردم و این ورودی اینترفیس رو بهش می دادم ولی دقیقا نمی دونستم برای چی استفاده می کردم و بدون اون مشکل نداشت (7 سال پیش)
0 0
متد onDownloadComplete که توی این اینترفیس هست،همون نقش متد دوم شما رو بازی می کنه ،یعنی کدهایی که قراره بعد از دانلود و اتمام کار volley اجرا بشن رو باید توی این متد بنویسید. (7 سال پیش)

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