হ্যান্ডেল.পোস্টডিলাইড বন্ধ করুন ()


109

আমি নতুন হ্যান্ডলার () দ্বারা একাধিক হ্যান্ডলারকে কল করি post

public class MyActivity extends AppCompatActivity implements OnClickListener {

    private Button btn;
    private Handler handler;
    private Runnable myRunnable;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        btn = (Button) findViewById(R.id.trainingsstart);
        btn.setOnClickListener(this);   
    }

    @Override
    public void onClick(View v) {
        Handler handler =  new Handler();
        Runnable myRunnable = new Runnable() {
            public void run() {
                // Things to be done
            }
        };

        handler.postDelayed(myRunnable, 3000);
    }

    @Override 
    public void onBackPressed() { 
        super.onBackPressed();
        handler.removeCallbacks(myRunnable);
    }   
}

আমার সমস্যাটি হ'ল যে আমার হ্যান্ডলারের "মাই হ্যান্ডলার" এর মতো নাম নেই। আমি কীভাবে এটি পরিচালনা করতে পারি?

সাহায্যের জন্য ধন্যবাদ!

এখন আমি এই ত্রুটি পেয়েছি:

03-28 17:47:03.662: E/AndroidRuntime(1961): FATAL EXCEPTION: main
03-28 17:47:03.662: E/AndroidRuntime(1961): java.lang.NullPointerException
03-28 17:47:03.662: E/AndroidRuntime(1961):     at de.basti12354.tage.uebungen.Tag1.onBackPressed(Tag1.java:120)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.app.Activity.onKeyUp(Activity.java:2159)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.KeyEvent.dispatch(KeyEvent.java:2647)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.app.Activity.dispatchKeyEvent(Activity.java:2389)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1860)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3791)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3774)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3516)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3666)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:1982)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1698)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1689)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1959)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.os.MessageQueue.nativePollOnce(Native Method)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.os.MessageQueue.next(MessageQueue.java:132)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.os.Looper.loop(Looper.java:124)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at android.app.ActivityThread.main(ActivityThread.java:5103)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at java.lang.reflect.Method.invokeNative(Native Method)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at java.lang.reflect.Method.invoke(Method.java:525)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-28 17:47:03.662: E/AndroidRuntime(1961):     at dalvik.system.NativeStart.main(Native Method)

উত্তর:


196

তুমি ব্যবহার করতে পার:

 Handler handler = new Handler()
 handler.postDelayed(new Runnable())

অথবা আপনি ব্যবহার করতে পারেন:

 handler.removeCallbacksAndMessages(null);

ডক্স

সর্বজনীন চূড়ান্ত শূন্যতা অপসারণ

এপিআই স্তরে যুক্ত হয়েছে 1 কলব্যাকের কোনও মুলতুবি পোস্ট এবং প্রেরিত বার্তাগুলি সরান যাঁর আপত্তি টোকেন। যদি টোকেনটি শূন্য থাকে, সমস্ত কলব্যাক এবং বার্তা মুছে ফেলা হবে।

অথবা আপনি নিম্নলিখিতগুলির মতো করতে পারেন:

Handler handler =  new Handler()
Runnable myRunnable = new Runnable() {
public void run() {
    // do something
}
};
handler.postDelayed(myRunnable,zeit_dauer2);

তারপর:

handler.removeCallbacks(myRunnable);

ডক্স

সর্বজনীন চূড়ান্ত শূন্যতা অপসারণ কলব্যাকস (চলমান আর)

এপিআই স্তরে যোগ করা হয়েছে 1 বার্তা সারিতে থাকা রনয়েবল আর এর যে কোনও পেন্ডিং পোস্ট অপসারণ করুন।

সর্বজনীন চূড়ান্ত শূন্যতা অপসারণ কলব্যাক্স (চলমান আর, অবজেক্ট টোকেন)

সম্পাদনা:

এই পরিবর্তন:

@Override
public void onClick(View v) {
    Handler handler =  new Handler();
    Runnable myRunnable = new Runnable() {

প্রতি:

@Override
public void onClick(View v) {
    handler = new Handler();
    myRunnable = new Runnable() { /* ... */}

কারণ আপনি নীচে আছে। এর আগে ঘোষিত হয়েছিল onCreateকিন্তু আপনি পুনঃ-ঘোষণা করেছেন এবং তারপরে এটি onClickএনপিইর দিকে পরিচালিত করে initial

Handler handler; // declared before onCreate
Runnable myRunnable;

1
হ্যান্ডেল.আরমোভক্যালব্যাকস (আমারআরনেবল) যুক্ত করুন; আমার অনব্যাকপ্রেসড () এর কাছে কি এটা ঠিক?
basti12354

1
@ ইউজার 34৩৩৩৩২ এটি ব্যবহার করুন আপনি রান থামাতে চান
রঘুনন্দন

1
আপনি কি দয়া করে আমার কোডটি দেখুন, আমি আপনার সহায়তাটি ব্যবহার করার চেষ্টা করি - তবে এখন আমি ত্রুটি পেয়েছি, আপনি আমার পোস্টে দেখতে পারেন।
বেসটি 12354

1
@ ব্যবহারকারী 3433232 সম্পাদনা পরীক্ষা করুন। আপনার হ্যান্ডলারটি শূন্য ছিল। আপনি এটিকে এনপিই-র দিকে অগ্রাহ্য অনক্লিকেকে পুনরায় ঘোষনা করলেন
রঘুনন্দন

6
আমি এপিআই 16 এ কাজ করছি এবং হ্যান্ডেলআরমেভক্যালব্যাকস (রানযোগ্য) কাজ করে না। তবে হ্যান্ডেলআর.আরমোভক্যালব্যাকসএন্ডমেসেসেস (নাল); ধন্যবাদ ধন্যবাদ
16:55

12

আপনি বুলিয়ান সংজ্ঞায়িত করতে পারেন এবং হ্যান্ডলারটি থামাতে চাইলে এটি মিথ্যাতে পরিবর্তন করতে পারেন। এটার মত..

boolean stop = false;

handler.postDelayed(new Runnable() {
    @Override
    public void run() {

        //do your work here..

        if (!stop) {
            handler.postDelayed(this, delay);
        }
    }
}, delay);

10

এটি পুরানো হতে পারে, তবে যারা উত্তর খুঁজছেন তাদের জন্য আপনি এটি ব্যবহার করতে পারেন ...

public void stopHandler() {
   handler.removeMessages(0);
}

চিয়ার্স


2
  Boolean condition=false;  //Instance variable declaration.

 //-----------------Inside oncreate--------------------------------------------------- 
  start =(Button)findViewById(R.id.id_start);
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                starthandler();

                if(condition=true)
                {
                    condition=false;
                }


            }
        });

        stop=(Button) findViewById(R.id.id_stoplocatingsmartplug);

        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                stophandler();

            }
        });


    }

//-----------------Inside oncreate---------------------------------------------------

 public void starthandler()
    {

        handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {


                if(!condition)
                {
                    //Do something after 100ms 


                }

            }
        }, 5000);

    }


    public void stophandler()
    {
        condition=true;
    }

কেন এই টুকরা কোড প্রশ্নের উত্তর দেয় দয়া করে তা ব্যাখ্যা করুন।
আন্দ্রে কুল

ধরে নিন এক্সএমএল স্টার্ট এবং স্টপে আপনার দুটি বোতাম রয়েছে। এই কোডটি হ্যান্ডলারটি কীভাবে শুরু বোতামটির ক্লিকের সাথে শুরু করা যায় এবং স্টপ বোতামটি দিয়ে থামানো যেতে পারে তার ডেমো দেখায়।
বিনয় শেঠি

এটি কাজ করে তবে রান্নেবল পটভূমিতে এখনও চলে।
কোল্ড টুনা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.