36 votes

Erreur de IntentService : Pas de constructeur par défaut

Je suis un nouveau venu dans Android, et j'essaie d'utiliser l'IntentService mais je reçois une erreur comme quoi il n'a pas de constructeur par défaut. J'ai essayé de redémarrer Android Studio, mais cela ne fonctionne pas.

package com.example.hitesh.kuchbhi;

import android.app.IntentService;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.TaskStackBuilder;
import android.support.v7.app.NotificationCompat;

import java.util.TreeSet;

public class DisplayNotification extends IntentService {
    public DisplayNotification(String name) {
        super("DisplayNotification");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // my code which even after deleting gives the same error
    }

erreur de chat de log

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.hitesh.kuchbhi, PID: 28899
                  java.lang.RuntimeException: Unable to instantiate service com.example.hitesh.kuchbhi.DisplayNotification: java.lang.InstantiationException: class com.example.hitesh.kuchbhi.DisplayNotification has no zero argument constructor
                      at android.app.ActivityThread.handleCreateService(ActivityThread.java:2728)
                      at android.app.ActivityThread.access$1800(ActivityThread.java:144)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5233)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)

Capture d'écran du fichier AndroidManifest enter image description here

0 votes

<!--suppress AndroidDomInspection --> | Non recommandé mais si vous voulez suspendre l'avertissement

112voto

Ratul Bin Tazul Points 1359

Il suffit d'ajouter un constructeur par défaut

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

Cela signifie qu'un constructeur sans paramètre

0 votes

Merci beaucoup. J'ai presque passé une journée entière pour ça !

0 votes

Vous êtes le bienvenu. Si cela résout votre problème, marquez cette réponse pour que d'autres personnes ayant un problème similaire puissent obtenir la solution.

2 votes

Notez également que ce constructeur DOIT être "public".

4voto

Oladipo Olasemo Points 89

Voir le guide du développeur Android pour la création de services d'arrière-plan https://developer.Android.com/training/run-background-service/create-service.html

D'après ce que j'ai compris, il vous suffit de créer le service d'intention en créant une classe qui prolonge IntentService et en y définissant une méthode qui surcharge onHandleIntent().

Vous devez supprimer le constructeur que vous avez défini pour votre classe DisplayNotification ou ajouter un constructeur par défaut comme suit :

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

2voto

Angelo Parente Points 591

Il semble que vous ayez besoin d'un constructeur sans paramètre, comme ceci :

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

Faites-moi savoir si ça vous aide.

0voto

Happy Vicky Points 761

Le service d'intention nécessite un constructeur de paramètres, nous devons donc fournir le constructeur sans argument avec les paramètres super.

Exemple

Pas de constructeur Param avec param super

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

Param constructor avec parma super

public DisplayNotification(String name) {
    super(name);
}

0voto

Ehsan Mashhadi Points 721

Il suffit d'ajouter un autre constructeur :

public DisplayNotification() {
    this("DisplayNotification");
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X