কোনও পরিষেবা তৈরি করার সময় কোনও খালি নির্মাণকারী নেই


98

আমি এই ত্রুটির সাথে লড়াই করছি:

08-08 11: 42: 53.179: ই / অ্যান্ড্রয়েডআরআরটাইম (20288): এর কারণ: java.lang.InsttiationException: ক্লাস com.example.localnotificationstest.ReminderSense ইনস্ট্যান্ট করতে পারবেন না; কোন খালি নির্মাণকারী

আমি বুঝতে পারি না কেন এই ত্রুটি ঘটে।

আমি নির্দিষ্ট সময়ে বিজ্ঞপ্তিটি উপস্থিত করার চেষ্টা করছি এবং একটি সময় অনুসন্ধানের পরে আমি এই পুরানো স্ট্যাকওভারফ্লো প্রশ্নটি পেয়েছি । আমি সবকিছু চেষ্টা করেছি কিন্তু আমার কোড ত্রুটি দেয়।

আমার এই সমস্যার সমাধান করতে সাহায্য করুন।

এখানে আমার প্রধান কার্যকলাপ কোডটি রয়েছে:

public class MainActivity extends Activity {
    int mHour, mMinute;
    ReminderService reminderService;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        reminderService = new ReminderService("ReminderService");

        TimePickerDialog dialog = new TimePickerDialog(this, mTimeSetListener, mHour, mMinute, false);
        dialog.show();
    }

    TimePickerDialog.OnTimeSetListener mTimeSetListener =  new OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker v, int hourOfDay, int minute) {
            mHour = hourOfDay;
            mMinute = minute;

            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
            Calendar c = Calendar.getInstance();
            c.set(Calendar.YEAR, Calendar.YEAR);
            c.set(Calendar.MONTH, Calendar.MONTH);
            c.set(Calendar.DAY_OF_MONTH, Calendar.DAY_OF_MONTH);
            c.set(Calendar.HOUR_OF_DAY, mHour);
            c.set(Calendar.MINUTE, mMinute);
            c.set(Calendar.SECOND, 0);

            long timeInMills = c.getTimeInMillis();

            Intent intent = new Intent(MainActivity.this, ReminderService.class);
            PendingIntent pendingIntent = PendingIntent.getService(MainActivity.this, 0, intent, 0);
            alarmManager.set(AlarmManager.RTC, timeInMills, pendingIntent);
        }
    };

}

এবং এখানে আমার অনুস্মারক সার্ভিস কোডটি রয়েছে:

public class ReminderService extends IntentService {

    public ReminderService(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        Intent notificationIntent = new Intent(this, MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 1, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);

        NotificationManager nm = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

        Notification.Builder builder = new Notification.Builder(this);

        builder.setContentIntent(contentIntent)
            .setSmallIcon(R.drawable.ic_launcher)
            .setTicker("Local Notification Ticker")
            .setWhen(System.currentTimeMillis())
            .setAutoCancel(true)
            .setContentTitle("Local Notification")
            .setContentText("This is content text.");
         Notification n = builder.getNotification();

         nm.notify(1, n);
    }

}

এবং এটি আমার প্রকাশ্য। এক্সএমএল:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.localnotificationtest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"  android:label="@string/app_name"  android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity"  android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name="ReminderService"></service>
    </application>

</manifest>

আমি জানি না আমি কোথায় ভুল করছি। আমি কিছু কোড অনুপস্থিত?

উত্তর:


221

আপনার ক্লাসে আপনাকে একটি খালি কনস্ট্রাক্টর যুক্ত করতে হবে অর্থাত্ একটি যুক্তি নেই takes

public ReminderService() {
    super("ReminderService");
}

ডকুমেন্টেশন থেকে ব্যাখ্যা :

nameকর্মী থ্রেড নাম ব্যবহার করা হয়।

দ্রষ্টব্য : এটি কেবল অভিপ্রায় পরিষেবাতে প্রযোজ্য।


9
কোনও যুক্তি ছাড়াই
প্রতীক বুটানী

44

আপনি আপনার পরিষেবাটি হিসেবে ঘোষণা তাহলে ইনার ক্লাস / নেস্টেড ক্লাস , এছাড়াও আপনি বর্গ করতে হবে স্ট্যাটিক

এটি ব্যতীত আপনি ত্রুটিটি পাবেন যদিও আপনার নির্মাতা সঠিক correct

ব্যাখ্যা

এর কারণটি হ'ল, আপনি কেবলমাত্র বাইরের শ্রেণীর প্রসঙ্গে অভ্যন্তরীণ ক্লাসগুলিকে ইনস্ট্যান্ট করতে পারেন, তাই আপনাকে প্রথমে বাইরের শ্রেণীর একটি উদাহরণ তৈরি করতে হবে।

আপনার অভ্যন্তর শ্রেণীর স্থির ঘোষণা এটি এর বাইরের শ্রেণি থেকে স্বাধীন করে তোলে



এটি কোথাও নথিভুক্ত করা হয়েছে কিনা তা আমি জানি না, তবে আপনি যদি অভ্যন্তরীণ অ স্থিত ক্লাসগুলি ইনস্ট্যান্ট করতে চান তবে প্রথমে বাইরের শ্রেণিটি ইনস্ট্যান্ট করা উচিত ated এখন আপনি যদি কোনও পরিষেবা শুরু করেন, উদাহরণটি সিস্টেম দ্বারা তৈরি করা হয়েছে, যা জানে না যে এটি প্রথমে বাইরের শ্রেণি থেকে একটি উদাহরণ তৈরি করতে হবে, সুতরাং এটি ক্রাশ হবে। তবে ত্রুটিটি সে ক্ষেত্রে সত্যই বিভ্রান্তিকর। কটাক্ষপাত করা stackoverflow.com/questions/70324/...
মারিয়ান Klühspies

32

ইনট্যান্স সার্ভিসের জন্য একটি ডিফল্ট নো-আর্গুমেন্ট কনস্ট্রাক্টর ঘোষণা করুন

public class ReminderService extends IntentService {
    public ReminderService() {
      super("ReminderService");
    }
}

7

আপনি যোগ করতে হবে ডিফল্ট নো যুক্তি কন্সট্রাকটর আপনার টু ReminderService বর্গ। আপনি কেবল নিজের কোনও নির্মাণকারীর (যা আপনার কাছে আছে) না লিখলে এটি কেবল স্পষ্টভাবে যুক্ত করা হয়। এখানে দেখুন: http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

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