2017-09-14 11 views
0

J'ai une liste d'objet et je veux passer à travers l'intention. J'ai également implémenté Serializable mais l'application plante.Comment faire pour passer Liste de l'objet personnalisé en utilisant l'intention que je reçois erreur en utilisant Serializable

public class YoutubePlaylist implements Serializable{ 

@SerializedName("message") 
@Expose 
private String message; 
@SerializedName("name") 
@Expose 
private String name; 
@SerializedName("playlist_id") 
@Expose 
private String playlistId; 

public String getMessage() { 
    return message; 
} 

public void setMessage(String message) { 
    this.message = message; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getPlaylistId() { 
    return playlistId; 
} 

public void setPlaylistId(String playlistId) { 
    this.playlistId = playlistId; 
}} 

L'erreur que je reçois est:

FATAL EXCEPTION: main 
                    Process: com.osolutions.news24, PID: 28944 
                    java.lang.RuntimeException: Parcel: unable to marshal value [email protected] 
                     at android.os.Parcel.writeValue(Parcel.java:1418) 
                     at android.os.Parcel.writeList(Parcel.java:759) 
                     at android.os.Parcel.writeValue(Parcel.java:1365) 
                     at android.os.Parcel.writeMapInternal(Parcel.java:662) 
                     at android.os.Parcel.writeMap(Parcel.java:646) 

Je passe comme ça dans la classe suivante:

public class YoutubeHorizontalPlaylistAdapter extends RecyclerView.Adapter<YoutubeHorizontalPlaylistAdapter.ViewHolder> { 


private Context context; 
private List<Item> itemList; 
private ArrayList<YoutubePlaylist> body; 
private HashMap<String, List<Item>> titleAndVideos; 

public YoutubeHorizontalPlaylistAdapter(Context context, 
             List<Item> itemList ,List<YoutubePlaylist> body, HashMap<String, List<Item>> titleAndVideos) { 
    this.context = context; 
    this.itemList = itemList; 
    this.body = (ArrayList<YoutubePlaylist>) body; 
    this.titleAndVideos = titleAndVideos; 
} 


@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_episode_item, null); 
    return new ViewHolder(v); 
} 

@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
@Override 
public void onBindViewHolder(final ViewHolder holder, final int position) { 
    holder.episodeNameTxt.setText(itemList.get(position).getSnippet().getTitle()); 
    String imagepath = itemList.get(position).getSnippet().getThumbnails().getHigh().getUrl(); 
    UrlImageViewHelper.setUrlDrawable(holder.episodeImg, imagepath, R.drawable.placeholder_logo, 300000); 
    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (NetworkUtil.isOnline(context)) { 
        // 
       Bundle bundle = new Bundle(); 
       bundle.putSerializable("title_body",body); 

       Intent i = new Intent(context, YoutubePlayListAdapter.class); 
       i.putExtra("hashmap", titleAndVideos); 
       i.putExtras(bundle); 

       i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       context.startActivity(i); 
      } else { 
       CustomAlertDialogManager.noInternetDialog(context); 
      } 
     } 
    }); 

} 

@Override 
public int getItemCount() { 
    return itemList.size(); 
} 

public static class ViewHolder extends RecyclerView.ViewHolder { 

    View v; 
    private TextView episodeNameTxt; 
    ImageView episodeImg; 


    public ViewHolder(View itemView) { 
     super(itemView); 
     episodeNameTxt = itemView.findViewById(R.id.episode_name); 
     episodeImg = itemView.findViewById(R.id.episode_img); 
     v = itemView; 

    } 

}} 

Note: Je suis le type coulée ArrayList dans le constructeur . S'il vous plaît, toute aide serait considérée.J'ai déjà essayé d'autres solutions de stackoverflow mais je n'ai pas pu trouver de solution.

+0

Vous devez convertir votre classe de modèle à Parcelable classe –

+0

j'ai essayé de le faire mais toujours la même erreur – bhaskar

Répondre

1

Créez votre classe d'articles Sérialisable ou Parcelable. Faire la classe d'objet de mettre en œuvre l'interface java.io.Serializable parce HashMap est déjà Serializable

+0

le problème est pour ArrayList corps pas hashmap – bhaskar

+0

Le problème n'est pas avec la classe YouTubePlaylist car elle est déjà sérialisable. Problème avec 'HashMap > titleAndVideos;' où la classe d'élément n'est pas sérialisable – Kunu

+0

après avoir implémenté sérialisable java.lang.RuntimeException: IOException exécutable parcelable écrit un objet sérialisable – bhaskar

0

Vous devez convertir classe Parcelable au lieu de Serializable

Aller à l'http://www.parcelabler.com/ et passé votre classe de modèle et le convertir.

Après la mise à jour de votre classe modèle passe Parcelable Liste par l'intention

Intent i = new Intent(context, YoutubePlayListAdapter.class); 
i.putExtra("hashmap", titleAndVideos); 
i.putParcelableArrayListExtra("title_body", body); 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
context.startActivity(i); 

En YoutubePlayListAdapter Activité vous pouvez obtenir par

ArrayList<YoutubePlaylist> mList = getIntent().getParcelableArrayListExtra("title_body");