نمایش نتایج 1 تا 8 از 8

نام تاپیک: مقداردهی یک listener در کلاس BroadCast Reciever

  1. #1
    کاربر دائمی
    تاریخ عضویت
    آبان 1394
    محل زندگی
    تهران
    پست
    179

    Question مقداردهی یک listener در کلاس BroadCast Reciever

    سلام دوستان . من در یک کلاس که از Broadcastreciver ارپ بری میکنه ...یک Interface نوشتم که باید از بیرون کلاس مقداردهی بشه ... اینکار رو با Setter و ... امتحان کردم ...ولی بعد از اینکه میاد داخل OnRecieve() مقدار اون Null میشه و منجر به Crash برنامه میشه ...هر جور امتحان کردم مقدار نال میشه آیا راه دیگه ای دارید؟ راهنماییم کنید لطفا




    public class CheckRequestAnswerReciever extends BroadcastReceiver {
    private AnswerRequestType answerRequestType;
    private ApiManager apiManager;
    RequestSharedPref requestSharedPref = new RequestSharedPref();

    public void setAnswerRequestType(AnswerRequestType answerRequestType) {
    this.answerRequestType = answerRequestType;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
    requestSharedPref.load();
    if (requestSharedPref.isAccept() == false && requestSharedPref.isReject() == false) {
    //it means we are in none state
    answerRequestType.onNoneRequest("None");
    }
    }
    public interface AnswerRequestType {
    public void onNoneRequest(String type);
    }
    }





    public class RequestingReciever extends BroadcastReceiver implements ApiManager.onResponseListener,
    CheckRequestAnswerReciever.AnswerRequestType {
    public RequestingReciever() {

    }

    private ApiManager apiManager;
    private Activity activity;
    private Context context;
    private SharedPref sharedPref;
    private static RequestListener requestListener;


    public void setRequestListener(RequestListener requestListener) {
    this.requestListener = requestListener;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
    this.context = context;
    activity = new MainAccountActivity();
    apiManager = new ApiManager();
    apiManager.setResponseListener(this);
    sharedPref = new SharedPref(apiManager.deliveryPartner, apiManager.deliveryPartner.deliveryBike, context);
    sharedPref.loadData();
    sendCheckDeliveryRequest();
    }

    private void checkNoneWorker() {
    CheckRequestAnswerReciever checkRequestAnswerReciever=new CheckRequestAnswerReciever();
    checkRequestAnswerReciever.setAnswerRequestType(th is);
    Intent requestIntent = new Intent(context, CheckRequestAnswerReciever.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 2, requestIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 50000, pendingIntent);//it counts 50 seconds...
    }





  2. #2
    کاربر دائمی آواتار rezaricky
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    Tabriz
    سن
    31
    پست
    441

    نقل قول: مقداردهی یک listener در کلاس BroadCast Reciever

    سلام . چرا از intent برای ارسال مقدار به broadcast receiver استفاده نمی گنید ؟ میتونید از طریق اینترقیس های Parclable یا Serializable این کار رو انجام بدید .

    Intent intent = new Intent("sample_broadcast");
    Foo foo = new Foo(); // class Foo implements parclable or serializable
    intent.putExtra("foo ", foo);
    sendBroadcast(intent);

  3. #3
    کاربر دائمی
    تاریخ عضویت
    آبان 1394
    محل زندگی
    تهران
    پست
    179

    نقل قول: مقداردهی یک listener در کلاس BroadCast Reciever

    سلام و متشکرم ...من احتیاج به توضیح بیشتر دارم یعنی از broadcast میتونم intent کنم به اکتیویتی که میخوام بعد اکتیویتی که intent رو گرفت از اطلاعات ارسالی استفاده کنه؟؟؟این implementکردن از parclable یا serializer برای چیه؟ اگر امکانش هست بیشتر توضیح بفرمایید...باز هم ممنونم

  4. #4
    کاربر دائمی آواتار rezaricky
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    Tabriz
    سن
    31
    پست
    441

    نقل قول: مقداردهی یک listener در کلاس BroadCast Reciever

    با استفاده از intent شما میتونی کلاس هایی رو که یکی از اینترفیس های Serializable و یا Parclable رو پیاده سازی کردن منتقل کنید .
    یک مثال با استفاده از Serializable :
    کلاسی که میخوایم انتقال بدیم :

    public class Foo implements Serializable {
    private int id;
    private String name;


    public Foo(int id, String name) {
    this.id = id;
    this.name = name;
    }


    public String getName() {
    return name;
    }


    public int getId() {
    return id;
    }
    }


    نحوه ارسال توسط intent :

    Foo foo = new Foo(10, "reza");
    intent.putExtra("foo", foo);
    startActivity(intent); // or sendBroadcast(intent);


    نحوه دریافت توسط intent :

    Foo foo = (Foo) intent.getExtras().getSerializable("foo");




    به همین سادگی .
    البته بطور کلی توصیه میشه از Parclable بجای Serializable استفاده بشه چون سرعت بیشتری داره. اما پیاده سازی Serializable سریع تره.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    آبان 1394
    محل زندگی
    تهران
    پست
    179

    نقل قول: مقداردهی یک listener در کلاس BroadCast Reciever

    متشکرم ...من کاری که شما فرمودین رو انجام دادم .ولی به مسئله دیگری برخوردم وقتی که فرگمنت من باز هست .... برنامه میره داخل onrecieve , و دوباره فرگمنت رو باز میکنه و باید قبلی رو ببنده من سعی کردم داخل broadcastreciver این کار رو انجام بدم نشد و داخل خود اکتیوتی هم که انجام میدم دومین فرگمنت رو که تازه start کرده می بنده ...
    راه حل هایی که پیشنهاد شده این هست که reciever رو بیارم داخل خور فرگمنت که بتونم ببندمش اون فرگمنت اولی رو قبل ازاینکه دومی رو start کنم ... آیا شما نظر دیگه ای دارید ..؟ مممنون از لطف شما

  6. #6
    کاربر دائمی آواتار rezaricky
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    Tabriz
    سن
    31
    پست
    441

    نقل قول: مقداردهی یک listener در کلاس BroadCast Reciever

    بدون دیدن کد نمیشه دقیق گفت .
    یک راحل حل میتونه انطوری باشه :
    broadcast receiver ها رو بیارید داخل فرگمنت و دو تا broadcast تعریف کنید:
    1- برای بستن فرگمنت
    2- broadcast فعلی که استفاده میکنید.

    و قبل از ارسال نوع 2 ، نوع 1 رو ارسال کنید که اگر فرگمنتی باز هست و اون رو دریافت میکنه خودش رو ببنده . بعد از اون نوع 2 رو ارسال کنید.

  7. #7
    کاربر دائمی
    تاریخ عضویت
    آبان 1394
    محل زندگی
    تهران
    پست
    179

    نقل قول: مقداردهی یک listener در کلاس BroadCast Reciever

    تلاشم رو کردم ولی هنوز نتونستم فرگمنت رو ببندم

  8. #8
    کاربر دائمی
    تاریخ عضویت
    آبان 1394
    محل زندگی
    تهران
    پست
    179

    نقل قول: مقداردهی یک listener در کلاس BroadCast Reciever

    بسیار ممنونم دوست عزیز تونستم با استفاده از Local BroadCast Receiver این کار رو انجام بدم حتی دیگه
    fragment
    رو استارت هم نکردم ...این لینک رو میگذارم که اگر عزیزان به مشکل برخودن ازش استفاده کنند.
    https://gist.github.com/Antarix/8131277

تاپیک های مشابه

  1. تعریف یک رویداد در کلاس
    نوشته شده توسط o0iman0o در بخش برنامه نویسی در Delphi
    پاسخ: 6
    آخرین پست: چهارشنبه 23 مرداد 1392, 10:22 صبح
  2. اجرا شدن يك رويداد در كلاس
    نوشته شده توسط jalalnooritehrani در بخش VB.NET
    پاسخ: 2
    آخرین پست: شنبه 03 اسفند 1387, 09:45 صبح
  3. سوال: دسترسی به یک خاصیت در کلاس اصلی برنامه
    نوشته شده توسط mahdi_farhani در بخش ASP.NET Web Forms
    پاسخ: 4
    آخرین پست: جمعه 01 آذر 1387, 15:19 عصر
  4. مقدار دهی اولیه یک آرایه در کلاس از فورم
    نوشته شده توسط shahali در بخش C#‎‎
    پاسخ: 1
    آخرین پست: سه شنبه 15 آبان 1386, 19:10 عصر
  5. استفاده از یک Function به عنوان یک Method در کلاس
    نوشته شده توسط Helen_Farhani در بخش PHP
    پاسخ: 4
    آخرین پست: دوشنبه 18 تیر 1386, 13:28 عصر

قوانین ایجاد تاپیک در تالار

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