Ich habe mit diesem Fehler zu kämpfen:
08-08 11: 42: 53.179: E / AndroidRuntime (20288): Auslöser: java.lang.InstantiationException: Klasse com.example.localnotificationtest.ReminderService kann nicht instanziiert werden; kein leerer Konstruktor
Ich verstehe nicht, warum dieser Fehler auftritt.
Ich versuche, eine Benachrichtigung zu einem bestimmten Zeitpunkt anzuzeigen, und nachdem ich nach einer bestimmten Zeit gesucht habe, habe ich diese alte Stackoverflow-Frage gefunden . Ich habe alles versucht, aber mein Code gibt Fehler.
Bitte helfen Sie mir, dieses Problem zu lösen.
Hier ist mein MainActivity-Code:
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);
}
};
}
und hier ist mein ReminderService-Code:
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);
}
}
und hier ist meine manifest.xml:
<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>
Ich weiß nicht, wo ich falsch liege. Fehlt mir ein Code?
Wenn Sie Ihren Service als innere Klasse / verschachtelte Klasse deklariert haben , müssen Sie die Klasse auch statisch machen
Ohne das erhalten Sie den Fehler, auch wenn Ihr Konstruktor korrekt ist
quelle
Deklarieren Sie einen Standardkonstruktor ohne Argumente für IntentService
quelle
Sie müssen Ihrer ReminderService- Klasse den Standardkonstruktor ohne Argumente hinzufügen . Dies wird nur implizit hinzugefügt, wenn Sie keinen eigenen Konstruktor schreiben (den Sie haben). Siehe hier: http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
quelle