Aucun constructeur vide lors de la création d’un service

Je suis aux sockets avec cette erreur:

08-08 11: 42: 53.179: E / AndroidRuntime (20288): Causé par: java.lang.InstantiationException: impossible d’instancier la classe com.example.localnotificationtest.ReminderService; pas de constructeur vide

Je ne comprends pas pourquoi cette erreur se produit.

J’essaie d’apparaître une notification à un moment précis et après avoir cherché pendant un certain temps, j’ai trouvé cette ancienne question de stackoverflow . J’ai tout essayé mais mon code donne des erreurs.

S’il vous plaît, aidez-moi à résoudre ce problème.

Voici mon code 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); } }; } 

et voici mon code ReminderService:

 public class ReminderService extends IntentService { public ReminderService(Ssortingng 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); } } 

et voici mon fichier manifest.xml:

             

Je ne sais pas où je vais mal. Est-ce que je manque un code?

Vous devez append un constructeur vide à votre classe, c’est-àdire sans constructeur:

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

Explication de la documentation :

Le name est utilisé pour nommer le thread de travail.

REMARQUE : ceci est uniquement applicable au service d’intention.

Si votre service est déclaré en tant que classe interne / classe nestede , vous devez également rendre la classe statique.

Sans cela, vous aurez l’erreur même si votre constructeur est correct

Explication

La raison en est que vous ne pouvez instancier que les classes internes dans le contexte de la classe externe. Vous devez donc créer une instance de la classe externe en premier.

La déclaration de votre classe interne statique le rend indépendant de sa classe externe

Déclarez un constructeur par défaut sans argument pour IntentService

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

Vous devez append le constructeur par défaut sans argument à votre classe ReminderService . Ceci est implicitement ajouté si vous n’écrivez pas votre propre constructeur (ce que vous avez). Voir ici: http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html