2016-09-20 5 views
0

Wie wird ArrayList vom Typ ArrayList<ArrayList<CustomObject>> zwischen activites übergeben? Ich habe bereits Parcelable mit customObject Modellklasse implementiert. Wenn ich wie intent.putParcelableArrayListExtra("catVideoList", categoriesVideoList) gehe, gibt es einen Fehler. Ich weiß, wie man ArrayList wie ArrayList<CustomObject> übergibt.Wie wird ArrayList <ArrayList <customtype>> zwischen den Aktivitäten übergeben?

Unten ist meine Modellklasse:

public class VideoContentModel implements Parcelable { 
    String videoId; 
    String videoUrl; 
    String videoTitle; 
    String videoDescription; 
    String videoThumbnailUrl; 
    String videoDuration; 
    String videoBitrate; 
    String videoPublishDate; 
    String videoCreateDate; 
    String videoUpdateDate; 
    String videoChannelId; 
    String videoChannelName; 
    String videoFeedType; 

    public VideoContentModel(String videoId, String videoUrl, String videoTitle, 
          String videoThumbnailUrl, String videoDuration, 
          String videoBitrate, String videoPublishDate, String videoCreateDate, 
          String videoUpdateDate, String videoChannelId, String videoChannelName, 
          String videoFeedType, String videoDescription) 
    { 
     this.videoId = videoId; 
     this.videoUrl = videoUrl; 
     this.videoTitle = videoTitle; 
     this.videoThumbnailUrl = videoThumbnailUrl; 
     this.videoDuration = videoDuration; 
     this.videoBitrate = videoBitrate; 
     this.videoPublishDate = videoPublishDate; 
     this.videoCreateDate = videoCreateDate; 
     this.videoUpdateDate = videoUpdateDate; 
     this.videoChannelId = videoChannelId; 
     this.videoChannelName = videoChannelName; 
     this.videoFeedType = videoFeedType; 
     this.videoDescription = videoDescription; 
    } 

    public String getVideoId() { 
     return videoId; 
    } 

    public String getVideoUrl() { 
     return videoUrl; 
    } 

    public String getVideoTitle() { 
     return videoTitle; 
    } 

    public String getVideoDescription() { 
     return videoDescription; 
    } 

    public String getVideoThumbnailUrl() { 
     return videoThumbnailUrl; 
    } 

    public String getVideoDuration() { 
     return videoDuration; 
    } 

    public String getVideoBitrate() { 
     return videoBitrate; 
    } 

    public String getVideoPublishDate() { 
     return videoPublishDate; 
    } 

    public String getVideoCreateDate() { 
     return videoCreateDate; 
    } 

    public String getVideoUpdateDate() { 
     return videoUpdateDate; 
    } 

    public String getVideoChannelId() { 
     return videoChannelId; 
    } 

    public String getVideoChannelName() { 
     return videoChannelName; 
    } 

    public String getVideoFeedType() { 
     return videoFeedType; 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeString(this.videoId); 
     dest.writeString(this.videoUrl); 
     dest.writeString(this.videoTitle); 
     dest.writeString(this.videoDescription); 
     dest.writeString(this.videoThumbnailUrl); 
     dest.writeString(this.videoDuration); 
     dest.writeString(this.videoBitrate); 
     dest.writeString(this.videoPublishDate); 
     dest.writeString(this.videoCreateDate); 
     dest.writeString(this.videoUpdateDate); 
     dest.writeString(this.videoChannelId); 
     dest.writeString(this.videoChannelName); 
     dest.writeString(this.videoFeedType); 
    } 

    protected VideoContentModel(Parcel in) { 
     this.videoId = in.readString(); 
     this.videoUrl = in.readString(); 
     this.videoTitle = in.readString(); 
     this.videoDescription = in.readString(); 
     this.videoThumbnailUrl = in.readString(); 
     this.videoDuration = in.readString(); 
     this.videoBitrate = in.readString(); 
     this.videoPublishDate = in.readString(); 
     this.videoCreateDate = in.readString(); 
     this.videoUpdateDate = in.readString(); 
     this.videoChannelId = in.readString(); 
     this.videoChannelName = in.readString(); 
     this.videoFeedType = in.readString(); 
    } 

    public static final Parcelable.Creator<VideoContentModel> CREATOR = new Parcelable.Creator<VideoContentModel>() { 
     @Override 
     public VideoContentModel createFromParcel(Parcel source) { 
      return new VideoContentModel(source); 
     } 

     @Override 
     public VideoContentModel[] newArray(int size) { 
      return new VideoContentModel[size]; 
     } 
    }; 
} 
+0

Fehler hinzufügen ...... – Pavya

+0

Verwenden Sie 'putExtra' und' getParcelable', um das Objekt zwischen den Aktivitäten zu übergeben. –

+0

@Pravin folgende Fehleranzeige 'Die Methode putParcelableArrayListExtra (String, ArrayList ) im Typ Intent ist nicht anwendbar für die Argumente (String, ArrayList >)' –

Antwort

1

Parcel unnötig hier sind, wie Sie einfache Objekte verwenden (String). ArrayList implementiert Serializable und sollte daher Ihr CustomObject. Sobald Sie es ändern, können Sie

intent.putExtra("name", yourArrayList); 

oder

Bundle bundle = new Bundle(); 
bundle.putSerializable("name", yourArrayList); 

Intent intent = new Intent(context, yourActivity.class); 
intent.putExtras(bundle); 

benutzen und es in Ihrer zweiten Aktivität abrufen.

1

Sie können dafür die Gson-Bibliothek verwenden, die parzellierbar ist.

Angenommen, Ihre Arraylist ist:

ArrayList<ArrayList<CustomObject>> outer = new ArrayList<>(); 

Nachdem es bevölkern, können Sie es auf die Absicht hinzufügen können, wie unten:

Intent i = new Intent(Activity1.this, Activity2.class); 
i.putExtra("randomdata", new Gson().toJson(outer)); 

Sie können diese später wieder abrufen in Activity2 wie folgt:

String extra = getIntent().getStringExtra("randomdata"); 
ArrayList<ArrayList<CustomObject>> list = new Gson().fromJson(extra, new TypeToken<ArrayList<ArrayList<CustomObject>>>(){}.getType()); 

Ich hoffe, es hilft.

Verwandte Themen