서비스를 만들 때 빈 생성자가 없습니다.
이 오류로 어려움을 겪고 있습니다.
08-08 11 : 42 : 53.179 : E / AndroidRuntime (20288) : 원인 : java.lang.InstantiationException : com.example.localnotificationtest.ReminderService 클래스를 인스턴스화 할 수 없습니다. 빈 생성자 없음
이 오류가 발생하는 이유를 이해할 수 없습니다.
특정 시간에 알림을 표시하려고하는데 시간을 검색 한 후이 오래된 stackoverflow 질문을 찾았습니다 . 나는 모든 것을 시도했지만 내 코드는 오류를 준다.
이 문제를 해결하도록 도와주세요.
내 MainActivity 코드는 다음과 같습니다.
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);
}
};
}
내 ReminderService 코드는 다음과 같습니다.
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.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>
나는 내가 어디로 잘못 가고 있는지 모른다. 코드가 누락 되었나요?
빈 생성자를 클래스에 추가해야합니다. 즉, 인수가없는 생성자를 추가해야합니다 .
public ReminderService() {
super("ReminderService");
}
Explanation from the documentation:
The name
is used to name the worker thread.
NOTE: this is only applicable to intent service.
If you have your Service declared as an Inner Class / Nested Class, you also need to make the class static
Without that you´ll get the error even if your constructor is correct
Explanation
The reason for that is, you can only instantiate inner classes in the context of the outer class, so you would need to create an instance of the outer class first.
Declaring your inner class static makes it independent from its outer class
Declare a default no-argument constructor for IntentService
public class ReminderService extends IntentService {
public ReminderService() {
super("ReminderService");
}
}
You need to add the default no-argument constructor to your ReminderService class. This is only implicitly added if you don't write a constructor of your own (which you have). See here: http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
참고URL : https://stackoverflow.com/questions/11859403/no-empty-constructor-when-create-a-service
'development' 카테고리의 다른 글
파이썬에서 멋진 열 출력 만들기 (0) | 2020.08.27 |
---|---|
숭고한 텍스트를 사용하여 특정 문자열 뒤에 줄 바꿈 제거 / 추가 (0) | 2020.08.27 |
페이지가 아닌 버튼 클릭으로 HTML 콘텐츠를 인쇄하는 방법은 무엇입니까? (0) | 2020.08.27 |
Integer를 Java에서 지역화 된 월 이름으로 어떻게 변환 할 수 있습니까? (0) | 2020.08.27 |
부트 스트랩에서 페이지 매김을 중앙에 배치 (0) | 2020.08.27 |