Je suis this tutoriel pour un lecteur audio. Je suis capable de jouer la chanson en service. Mais quand j'essaie de sauvegarder la chanson en utilisant gson et envoyer l'arraylist au service, mais quand je clique sur l'élément de liste le crash de l'application avec l'erreurobtenir l'erreur wile en utilisant gson sauver des données et mediaplayer service
FATAL EXCEPTION: main
Process: com.example.neelay.level95, PID: 15133
java.lang.RuntimeException: Unable to start service [email protected] with Intent { cmp=com.example.neelay.level95/.MediaPlayerService }: java.lang.RuntimeException: Failed to invoke private android.net.Uri() with no args
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3034)
at android.app.ActivityThread.access$2200(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
Caused by: java.lang.RuntimeException: Failed to invoke private android.net.Uri() with no args
at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:111)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:210)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
at com.google.gson.Gson.fromJson(Gson.java:887)
at com.google.gson.Gson.fromJson(Gson.java:852)
at com.google.gson.Gson.fromJson(Gson.java:801)
at com.example.neelay.level95.StorageUtil.loadAudio(StorageUtil.java:42)
at com.example.neelay.level95.MediaPlayerService.onStartCommand(MediaPlayerService.java:106)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3017)
at android.app.ActivityThread.access$2200(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
Caused by: java.lang.InstantiationException: Can't instantiate abstract class android.net.Uri
at java.lang.reflect.Constructor.newInstance(Native Method)
at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:108)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:210)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
at com.google.gson.Gson.fromJson(Gson.java:887)
at com.google.gson.Gson.fromJson(Gson.java:852)
at com.google.gson.Gson.fromJson(Gson.java:801)
at com.example.neelay.level95.StorageUtil.loadAudio(StorageUtil.java:42)
at com.example.neelay.level95.MediaPlayerService.onStartCommand(MediaPlayerService.java:106)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3017)
at android.app.ActivityThread.access$2200(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
erreur dans le service où je reçois une erreur
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
try {
//Load data from SharedPreferences
StorageUtil storage = new StorageUtil(getApplicationContext());
audioList = storage.loadAudio();
audioIndex = storage.loadAudioIndex();
if (audioIndex != -1 && audioIndex < audioList.size()) {
//index is in a valid range
activeAudio = audioList.get(audioIndex);
} else {
stopSelf();
}
} catch (NullPointerException e) {
stopSelf();
}
//Request audio focus
if (requestAudioFocus() == false) {
//Could not gain focus
stopSelf();
}
if (mediaSessionManager == null) {
try {
initMediaSession();
initMediaPlayer();
} catch (RemoteException e) {
e.printStackTrace();
stopSelf();
}
buildNotification(PlaybackStatus.PLAYING);
}
//Handle Intent action from MediaSession.TransportControls
handleIncomingActions(intent);
return super.onStartCommand(intent, flags, startId);
}
erreur dans songutil classe où il affiche l'erreur
public ArrayList<Songfileinfo> loadAudio() {
preferences = context.getSharedPreferences(STORAGE, Context.MODE_PRIVATE);
Gson gson = new Gson();
String json = preferences.getString("audioArrayList", null);
Type type = new TypeToken<ArrayList<Songfileinfo>>() {
}.getType();
return gson.fromJson(json, type);
}
Je ne suis en mesure de savoir que je reçois une erreur dans la classe de service à la ligne 106 audioList = storage.loadAudio();
et songutil classe à la ligne 41 return gson.fromJson(json, type);
mais comment je peux résoudre ce problème toute aide sera helpfull.Now Je suis en mesure de jouer la chanson quand je retire un peu de code de songfileinfo voici le code
public class Songfileinfo implements Serializable {
private String title,album,artist,file_uri;
// privé Uri album_art; // privée longue durée;
public Songfileinfo(String data, String title, String album, String artist) {
this.file_uri = data;
this.title = title;
this.album = album;
this.artist = artist;
}
public Songfileinfo() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAlbum() {
return album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getFile_uri() {
return file_uri;
}
public void setFile_uri(String file_uri) {
this.file_uri = file_uri;
}
}
mais quand j'ajoute thes lises de code, il est encore en train écrasé
private Uri album_art;
private long duration;
public Uri getAlbum_art() {
return album_art;
}
public void setAlbum_art(Uri album_art) {
this.album_art = album_art;
}
public long getDuration() {
return duration;
}
public void setDuration(long duration) {
this.duration = duration;
}
une raison quelconque y est, il se est écrasé je l'ajoute dans le constructeur aussi.
Si vous voyez le tutoriel, vous verrez ici qu'il est utilisé pour enregistrer la liste du tableau dans la préférence partagée –
Oui, mais ils ne stockent pas "Uri" en utilisant gson bro. Vous ne devriez pas avoir de classe Uri dans votre objet de données. –