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

استفاده از کلاسهای non-static در static

EloMan  12 سال پیش  12 سال پیش
0 0

دوستان ایا راهی وجود داره که بشه این کار رو کرد؟ منظورم عنوان سواله. مثلا استفاده از tostring در کلاس استاتیک. یا پیشنهاد جایگزینی دارید؟

0 0
آیا استفاده از Listener کارایی داره؟ (12 سال پیش)
0 0
آقا یکی نیست به این مشکل بر خورده باشه؟ استاد اگه امکان داره کمک کنید. من از توی یک کلاس میخوام کلاس دیگه رو که استاتیک هست مقدار دهی کنم. در واقع مجبور به این کارم. اما وقتی از توابع و متد های غیر استاتیک در اون استفاده میکنم ارور میده. مثلا همین tostring که برای خواندن از string توی پروژه مارکت استفاده شده. (12 سال پیش)
0 0
اون چیزی که نوشتی رو بزاری بهتر میشه نظر داد. (12 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
محمد حسین زاده  12 سال پیش
+2 0

tostring که مثال زدید یه عضو کلاسه که در صورت وهله سازی کلاس معنا پیدا میکنه. اگه در مورد یه کلاس استاتیک به این مورد برخوردید با اصلاح معماری نرم افزارتون باید مشکل رو حل کنید. نمیتونید توقع داشته باشید یه کلاس استاتیک رفتارهای یک کلاس غیر استاتیک رو براتون فراهم کنه. کدی که باعث نیازتون به همچین چیزی شده رو به اشتراک بذارید تا دوستان بتونن راهنمایی کنن. البته عنوان سوال شدنیه ولی مثالی که زدید خیر

پاسخ به سوال 
EloMan  12 سال پیش
0 0

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

اما سوال دیگه ای هم داشتم و اینه که زمانی که تلاش مجدد تاچ شد در هر اکتیویتی باید کار متفاوتی انجام بشه. حالا به چه صورت میشه که متد مربوطه(منظورم همون کار متفاوت در هر اکتیویتی)  رو به کلاسی که دیالوگ توی اون نوشته شده  ارسال کنم؟ توجه داشته باشین که کد زیر هم متدی از این کلاسی هست که دیالوگ توی اون نوشته شده. 

  private void static exitApplication() {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

پاسخ به سوال 
مجتبی یگانه  12 سال پیش
+3 0

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

خوب دوست عزیز ، برای حل مشکلتون باید اول مفهوم Static - non static رو کامل تر متوجه بشید

وقتی متدی non static باشه ، یعنی بدون ساختن نمونه کلاس به این شکل

 Car myCar = new Car();

نمی تونید ازش استفاده کنید ، اما در static یعنی شما میتونید از همون کلاس اصلی تون یه متدی را فراخوانی کنید !

باتوجه به این که ، معلوم نیست این متد کجا داره اجرا میشه ، واضح هست که Context اش هم مشخص نیست (تقریبا یعنی اینکه از کدوم اکتیویتی داره اجرا میشه ) پس کافیه ما توی کلاس Static شما ، بگیم که Context فلان اکتیویتی هست ، پس تابع شما نیاز به یه ورودی ، به عنوان بستری که متد های non static در اون اجرا بشن داره

public static void ExitApp(Context context) {
        Intent intent = new Intent();
        context.startActivity(intent);
}

موفق باشید

پاسخ به سوال 
محمد حسین زاده  12 سال پیش
+1 0

این intent باید توسط کی اجرا بشه؟ مثلا میتونه توسط یه CURRENT ACTIVITY نامی اجرا بشه که تو آموزش ها نحوه همیشه داشتنش رو توضیح دادن. اینجا CURRENT ACTIVITY همون وهله ایه (Instance) که وظیفه اجرای متد رو به عهده داره و کلاس استاتیک شما صرفا میتونه باعث کوتاه تر شدن کد بشه

+1 0
جواب ALU کامل هست. همزمانی ارسال داشتیم (12 سال پیش)
پاسخ به سوال 
Spirit  12 سال پیش
+2 0

الان میشه ازش بصورت استاتیک استفاده کرد (البته با کلاس G که آشنای تمام دوستان هستش) :

 public void static exitApplication() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
G.context.startActivity(intent);
}

خب میشه یه متغیر به عنوان ورودی به اون متدی یا کلاسی که داری بفرستید (مثلا بصورت عدد) ، حالا با switch با توجه به اون ورودی کارهای مختلف رو میتونید انجام بدید.

 public void showMyDialog(int id) {

// use switch for doing multiple actions

}

 
 showMyDialog(1);
0 0
مرسی از همگی .مشکل اول کامل حل شد.اشتباه ناشیانه ای بود :) راهنمایی برای دومی هم عالی. میرم که خروجی بگیرم. (12 سال پیش)
0 0
آیا امکانش هست که یک متد رو به عنوان آرگومان به همین کلاس که گفتم ارسال کنم. البته قبلا دیدم که یک کلاس رو با new میفرستادن. ولی متد ایا میشه؟ یا اینکه تنها راهش اینه این متد مورد نظر رو استاتیک کنم و توی کلاس دیالوگ فراخوانیش کنم؟ اگه متوجه نشدید واضح تر توضیح بدم (12 سال پیش)
0 0
لینک (12 سال پیش)
0 0
اگه منظورت رو درست متوجه شده باشم. جواب ساده نه هست. ( تو دات نت این آرکومانها رو به عنوان Delegate میشناسن) (12 سال پیش)
0 0
اگه اشتباه نکنم این لینک میگه باید یه اینتر فیس داشته باشم که توی positive button آلرت بسازم و مقدار دهی کنم. یا برعکس؟ (12 سال پیش)
0 0
واقعا ممنونم دوست عزیز. با استفاده از اینترفیس مشکل کاملا برطرف شد. اینترفیس رو حامل همون متد گذاشتم (12 سال پیش)

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