Saya berjuang dengan kesalahan ini:
08-08 11: 42: 53.179: E / AndroidRuntime (20288): Disebabkan oleh: java.lang.InstantiationException: tidak dapat membuat instance kelas com.example.localnotificationtest.ReminderService; tidak ada konstruktor kosong
Saya tidak mengerti mengapa kesalahan ini terjadi.
Saya mencoba untuk menampilkan pemberitahuan pada waktu tertentu dan setelah mencari waktu saya menemukan pertanyaan stackoverflow lama ini . Saya mencoba segalanya tetapi kode saya memberikan kesalahan.
Tolong bantu saya untuk memecahkan masalah ini.
Inilah kode MainActivity saya:
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);
}
};
}
dan ini kode ReminderService saya:
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);
}
}
dan inilah manifest.xml saya:
<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>
Saya tidak tahu di mana saya salah. Apakah saya melewatkan beberapa kode?
Jika Anda memiliki Service yang dideklarasikan sebagai Inner Class / Nested Class , Anda juga perlu membuat class tersebut menjadi statis
Tanpa itu Anda akan mendapatkan kesalahan meskipun konstruktor Anda benar
sumber
Deklarasikan konstruktor tanpa argumen default untuk IntentService
sumber
Anda perlu menambahkan konstruktor tanpa argumen default ke kelas ReminderService Anda . Ini hanya ditambahkan secara implisit jika Anda tidak menulis konstruktor Anda sendiri (yang Anda miliki). Lihat di sini: http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
sumber