Ningún constructor vacío cuando crea un servicio

Estoy luchando con este error:

08-08 11: 42: 53.179: E / AndroidRuntime (20288): Causado por: java.lang.InstantiationException: no se puede crear una instancia de la clase com.example.localnotificationtest.ReminderService; sin constructor vacío

No entiendo por qué ocurre este error.

Intento que aparezca la notificación en un momento específico y después de buscar por un tiempo encontré esta antigua pregunta de stackoverflow . Intenté todo pero mi código da error.

Por favor ayúdame a resolver este problema.

Aquí está mi código de 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); } }; } 

y aquí está mi código 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); } } 

y aquí está mi manifest.xml:

             

No sé dónde me estoy equivocando. ¿Me falta algún código?

Necesita agregar un constructor vacío a su clase, es decir, uno que no tenga argumentos:

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

Explicación de la documentación :

El name se usa para nombrar el hilo de trabajo.

NOTA : esto solo es aplicable al servicio intencionado.

Si tiene su Servicio declarado como Clase interna / Clase anidada , también necesita hacer que la clase estética

Sin eso, obtendrás el error incluso si tu constructor es correcto

Explicación

El motivo es que solo puede crear instancias de clases internas en el contexto de la clase externa, por lo que primero deberá crear una instancia de la clase externa.

Declarar su clase interna estática lo hace independiente de su clase externa

Declarar un constructor predeterminado sin argumento para IntentService

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

Necesita agregar el constructor predeterminado sin argumentos a su clase ReminderService . Esto solo se agrega implícitamente si no escribe un constructor propio (que tiene). Vea aquí: http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html