创build服务时没有空的构造函数
我正在努力处理这个错误:
08-08 11:42:53.179:E / AndroidRuntime(20288):引起:java.lang.InstantiationException:无法实例化类com.example.localnotificationtest.ReminderService; 没有空的构造函数
我不明白为什么会出现这个错误。
我想在特定的时间出现通知,search一段时间后,我发现这个老的计算器的问题 。 我试了一切,但我的代码给错误。
请帮我解决这个问题。
这是我的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"); }
文档说明 :
该name
用于命名工作线程。
注意 :这仅适用于意向服务。
如果您将服务声明为内部类/嵌套类 ,则还需要使类保持静态
没有这个,即使你的构造函数是正确的,你也会得到错误
为IntentService声明一个默认的无参数构造 函数
public class ReminderService extends IntentService { public ReminderService() { super("ReminderService"); } }
您需要将默认的无参构造函数添加到您的ReminderService类中。 如果你不写你自己的构造函数,这只会被隐式添加。 请参阅: http : //docs.oracle.com/javase/tutorial/java/javaOO/constructors.html