হ্যান্ডলার বিমূর্ত, তাত্ক্ষণিক করা যায় না


97

আমি Handlerআমার অ্যাপ্লিকেশনটিতে একটি ব্যবহার করার চেষ্টা করছি । তবে যখন আমি এটির মতো এটি ইনস্ট্যান্ট করি:

Handler handler = new Handler();

আমি নিম্নলিখিত ত্রুটি পেয়েছি।

Gradle: error: Handler is abstract; cannot be instantiated

এবং যখন আমি সমাধানগুলি পরীক্ষা করি, এটি আমাকে এই পদ্ধতিগুলি প্রয়োগ করতে বলে:

Handler handler = new Handler() {
        @Override
        public void close() {

        }

        @Override
        public void flush() {

        }

        @Override
        public void publish(LogRecord record) {

        }
    };

আমি এর Handlersআগে কখনও ব্যবহার করি নি এবং আমি কিছু বিলম্বের পরে কেবল কোনও পদ্ধতিতে কল করতে এটি ব্যবহার করছি। এটি অর্জন করতে, আমি ব্যবহার করেছি:

handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //Do something after 100ms
            }
        }, 100);

তবে এটি ত্রুটিটি দেখায়:

Gradle: error: cannot find symbol method postDelayed(<anonymous Runnable>,int)

সাহায্য করুন! আগাম ধন্যবাদ.

উত্তর:


381

দেখে মনে হচ্ছে আপনি একটি ভুল হ্যান্ডলার ক্লাস আমদানি করেছেন

import java.util.logging.Handler;

এটিতে পরিবর্তন করুন

import android.os.Handler;

4
এটি অবশ্যই আমার পক্ষে সহায়ক ছিল - যেমন কোনও আইওএস বিকাশকারী অ্যান্ড্রয়েডের জন্য মাঝে মধ্যে প্রজেক্টগুলিতে ফিরে আসছেন, অ্যান্ড্রয়েড স্টুডিওতে কিছু বিরক্তিকর তাত্পর্য রয়েছে, আমদানি / অটোকোম্প্লেটিংয়ের ক্ষেত্রে খুব চালাক হওয়ার চেষ্টা করা হয় যার অর্থ দ্রুত সময়ের 90% হয়, 5 এক্স ধীর গতি হয় 10% সময়। আবার ধন্যবাদ
জোয়েল বাল্মার

4
@ গ্লেন--, নিঃসন্দেহে, এটি আমার কোডটিতে অন্যান্য ত্রুটিগুলির সমস্ত পদ্ধতি সমাধান করেছে। ++ এই উত্তর!
জোয়েল বাল্মার

উভয়ের মধ্যে পার্থক্য কী?
কৃষ্ণদাস পিসি

এটি বিশ্বাস করা শক্ত যে তারা ইতিমধ্যে জাভাতে সংজ্ঞায়িত এমন কোনও ক্লাসের নাম ব্যবহার করবে ...
জুলিয়াস

5

ইন প্লেস অফ

import java.util.logging.Handler; 

যোগ করুন

import android.os.Handler;

এছাড়াও যদি আপনি ব্যবহার

Handler handler = new Handler() {
    @Override
    public void close() {

    }

    @Override
    public void flush() {

    }

    @Override
    public void publish(LogRecord record) {

    }
};

এটি ত্রুটি দেয় যে বুলিয়ান কিছুটা ত্রুটির মতো খুঁজে পেয়েছিল তাই বুলিয়ান হ্যান্ডলারটি = নতুন হ্যান্ডলার () ব্যবহার করুন ... বা কেবল (নতুন হ্যান্ডলার ()) ব্যবহার করুন {.... `


2

অ্যান্ড্রয়েড এসডিকে স্বয়ংক্রিয়ভাবে ভুলটি আমদানি করে। এজন্যই মানুষের সমস্যা রয়েছে।


এটি অ্যান্ড্রয়েডের পক্ষে সম্পূর্ণ হাস্যকর
জুলিয়াস

1
    import android.os.Bundle;
    import android.os.Handler;
    import android.support.v7.app.ActionBarActivity;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

public class ActionActivity extends ActionBarActivity {

    final String LOG_TAG = "myLogs";
    TextView tvInfo;
    Button btnStart;
    Handler h;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.action_activity);
        tvInfo = (TextView)findViewById(R.id.tvinfo);
        btnStart = (Button)findViewById(R.id.btnstart);

        h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                // update TextView
                tvInfo.setText("Закачано файлов: " + msg.what);
                if (msg.what == 10) btnStart.setEnabled(true);
            };
        };

    }

    public void onclick(View v) {
        switch (v.getId()) {
            case R.id.btnstart:
                btnStart.setEnabled(false);
                Thread t = new Thread(new Runnable() {
                    public void run() {
                        for (int i = 1; i <= 10; i++) {
                            // some process
                            downloadFile();
                            h.sendEmptyMessage(i);

                            Log.d(LOG_TAG, "i = " + i);
                        }
                    }
                });
                t.start();
                break;
            case R.id.btnTets:
                Log.d(LOG_TAG, "test");
                break;
            default:
                break;
        }
    }

    public void downloadFile(){
        try{
            TimeUnit.SECONDS.sleep(1);
        }
        catch (InterruptedException e){
                e.printStackTrace();
        };
    }
}

4
কিছু ব্যাখ্যা যোগ যত্ন?
ওনিক

0

আমদানি android.os.Handler; আপনার হ্যান্ডলারের জন্য আপনার পার্পিউটিস প্রয়োজন। হ্যান্ডলার শ্রেণি আমদানির আগে দয়া করে উপরেরটি আমদানির চেষ্টা করুন।


0

দেখে মনে হচ্ছে আপনি ভুল হ্যান্ডলার শ্রেণি প্রয়োগ করেছেন

import java.util.logging.Handler;

এটিতে পরিবর্তন করুন

import android.os.Handler;

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