如何使用意图通过自定义列表对象 [英] How to pass Custom List Object using intent

查看:105
本文介绍了如何使用意图通过自定义列表对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的Andr​​oid应用程序,并在这我想通过故意一对自定义列表对象传递给其他的活动。
我已经做了CustomList类实现Serializable接口。
并使用下面的code意图通过发送数据:

I am working on android application and in that I want to pass a Cutom list Object to other activity via intent. I have made that CustomList class to implement Serializable interface. and sending the data via intent using the below code:

FeedList mSelectedFeedList = mFeedItemList.get(position);
Intent intent = new Intent(mContext, SingleFeedPage.class);                                         intent.putExtra("feedItemPosition", listItemHolder.mSelectedPosition);
intent.putExtra("action_id", mSelectedFeedList.getmActionId());
intent.putExtra("feedList", mSelectedFeedList);

当我通过发送意图这mSelectedFeedList我得到以下错误:

When I am sending this mSelectedFeedList via intent I am getting the below error:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.socialengineaddons.mobileapp.classes.common.utils.FeedList)

下面是我的code为FeedList.java

Below is my code for FeedList.java

public class FeedList {

private String mFeedIcon, mFeedTitle, mFeedPostTime, mWebUrl, mActionTypeBody, mFeedAttachmentType;
private int mAttachmentCount, mLikeCount, mCommentCount, mIsLike, mPhotoAttachmentCount;
private int mCommentAble, mShareAble;
private int mCanComment;
private JSONArray mFeedMenusArray, mFeedAttachmentArray, mFeedFilterArray;
private JSONObject mFeedFooterMenus, mFeedPostMenus,mFeedObject;
String mHiddenBodyText, mUndoHiddenFeedURl, mHideAllText, mHideAllUrl, mHideAllName, mFeedType;
int mSubjectId, mActionId;
Map<String, String> mClickableStringsList;
Map<Integer, String> mVideoInfo;
boolean noFeed;
ArrayList<PhotoListDetails> mPhotoDetails;

public FeedList(int actionId, int subjectId, String mFeedTitle, String mFeedIcon, JSONArray
        mFeedMenusArray, String mFeedPostTime, int attachmentCount, int likeCount, int commentCount,
                int canComment, int isLike, JSONObject feedObject, JSONArray feedAttachmentArray, int photoAttachmentCount,
                JSONObject feedFooterMenus, int commentAble, int shareAble,
                Map<String, String> clickableStrings, String actionTypeBody, Map<Integer, String> videoInfo,
                String url, String feedAttachmentType, String type) {

    this.mSubjectId = subjectId;

    this.mFeedTitle = mFeedTitle;
    this.mFeedIcon = mFeedIcon;
    this.mFeedMenusArray = mFeedMenusArray;
    this.mFeedPostTime = mFeedPostTime;

    mAttachmentCount = attachmentCount;
    mLikeCount = likeCount;
    mCommentCount = commentCount;
    mIsLike = isLike;
    mCanComment = canComment;

    this.mFeedObject = feedObject;
    this.mFeedAttachmentArray = feedAttachmentArray;
    this.mPhotoAttachmentCount = photoAttachmentCount;

    this.mCommentAble = commentAble;
    this.mShareAble = shareAble;

    mFeedFooterMenus = feedFooterMenus;

    mActionId = actionId;

    mClickableStringsList = clickableStrings;
    mVideoInfo = videoInfo;

    mWebUrl = url;
    mActionTypeBody = actionTypeBody;

    mFeedAttachmentType = feedAttachmentType;
    mFeedType = type;

}

public FeedList(JSONObject feedPostMenus, JSONArray FeedFilterArray, boolean isNoFeed){
    mFeedPostMenus =  feedPostMenus;
    mFeedFilterArray = FeedFilterArray;
    this.noFeed = isNoFeed;
}

public boolean isNoFeed() {
    return noFeed;
}

public String getmFeedIcon() {
    return mFeedIcon;
}

public String getmFeedTitle() {
    return mFeedTitle;
}

public String getmFeedPostTime() {
    return mFeedPostTime;
}

public JSONArray getmFeedMenusArray() {
    return mFeedMenusArray;
}

public void setmFeedMenusArray(JSONArray mFeedMenusArray) {
    this.mFeedMenusArray = mFeedMenusArray;
}

public int getmAttachmentCount() {
    return mAttachmentCount;
}

public int getmLikeCount() {
    return mLikeCount;
}

public void setmLikeCount(int mLikeCount) {
    this.mLikeCount = mLikeCount;
}

public int getmCommentCount() {
    return mCommentCount;
}

public void setmCommentCount(int mCommentCount) {
    this.mCommentCount = mCommentCount;
}

public int getmIsLike() {
    return mIsLike;
}

public void setmIsLike(int mIsLike) {
    this.mIsLike = mIsLike;
}

public int ismCanComment() {
    return mCanComment;
}

public int getmPhotoAttachmentCount() {
    return mPhotoAttachmentCount;
}

public JSONArray getmFeedAttachmentArray() {
    return mFeedAttachmentArray;
}

public JSONObject getmFeedFooterMenus() {
    return mFeedFooterMenus;
}

public void setmFeedFooterMenus(JSONObject mFeedFooterMenus) {
    this.mFeedFooterMenus = mFeedFooterMenus;
}

public String getmHiddenBodyText() {
    return mHiddenBodyText;
}

public void setmHiddenBodyText(String mHiddenBodyText) {
    this.mHiddenBodyText = mHiddenBodyText;
}

public String getmUndoHiddenFeedURl() {
    return mUndoHiddenFeedURl;
}

public void setmUndoHiddenFeedURl(String mUndoHiddenFeedURl) {
    this.mUndoHiddenFeedURl = mUndoHiddenFeedURl;
}

public String getmHideAllText() {
    return mHideAllText;
}

public void setmHideAllText(String mHideAllText) {
    this.mHideAllText = mHideAllText;
}

public String getmHideAllUrl() {
    return mHideAllUrl;
}

public void setmHideAllUrl(String mHideAllUrl) {
    this.mHideAllUrl = mHideAllUrl;
}

public String getmHideAllName() {
    return mHideAllName;
}

public void setmHideAllName(String mHideAllName) {
    this.mHideAllName = mHideAllName;
}

public int getmCommentAble() {
    return mCommentAble;
}

public void setmCommentAble(int mCommentAble) {
    this.mCommentAble = mCommentAble;
}

public int getmShareAble() {
    return mShareAble;
}

public void setmShareAble(int mShareAble) {
    this.mShareAble = mShareAble;
}

public int getmSubjectId() {
    return mSubjectId;
}

public void setmSubjectId(int mSubjectId) {
    this.mSubjectId = mSubjectId;
}

public int getmActionId() {
    return mActionId;
}

public Map<String, String> getmClickableStringsList() {
    return mClickableStringsList;
}


public JSONArray getmFeedFilterArray() {
    return mFeedFilterArray;
}


public JSONObject getmFeedPostMenus() {
    return mFeedPostMenus;
}


public ArrayList<PhotoListDetails> getmPhotoDetails() {
    return mPhotoDetails;
}

public void setmPhotoDetails(ArrayList<PhotoListDetails> mPhotoDetails) {
    this.mPhotoDetails = mPhotoDetails;
}

public String getmActionTypeBody() {
    return mActionTypeBody;
}

public void setmActionTypeBody(String mActionTypeBody) {
    this.mActionTypeBody = mActionTypeBody;
}

public JSONObject getmFeedObject() {
    return mFeedObject;
}

public void setmFeedObject(JSONObject mFeedObject) {
    this.mFeedObject = mFeedObject;
}

public Map<Integer, String> getmVideoInfo() {
    return mVideoInfo;


}

public String getmWebUrl() {
    return mWebUrl;
}

public String getmFeedType() {
    return mFeedType;
}

public String getmFeedAttachmentType() {
    return mFeedAttachmentType;
}

}

我怎样才能解决这个问题,任何人对此有任何想法。

How can I resolve this, anyone have any idea about this.

非常感谢先进的!

推荐答案

您必须使用parcelable类。

You must use parcelable class.

public class Student implements Parcelable{
        private String id;
        private String name;


        // Constructor
        public Student(String id, String name ){
            this.id = id;
            this.name = name;

       }
       // Getter and setter methods
       .........
       .........

       // Parcelling part
       public Student(Parcel in){
           String[] data = new String[3];

           in.readStringArray(data);
           this.id = data[0];
           this.name = data[1];

       }

       @Оverride
       public int describeContents(){
           return 0;
       }

       @Override
       public void writeToParcel(Parcel dest, int flags) {
           dest.writeStringArray(new String[] {this.id,
                                               this.name });
       }
       public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
           public Student createFromParcel(Parcel in) {
               return new Student(in); 
           }

           public Student[] newArray(int size) {
               return new Student[size];
           }
       };
   }

使用:

intent.putExtra("student", new Student("1","Mike"));

获取数据:

Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");

或者你可以使用这个库:

Or you can use this library :

https://github.com/johncarl81/parceler

或者使用序列化:

public class Student implements Serializable {
        private String id;
        private String name;



        public Student(String id, String name ){
            this.id = id;
            this.name = name;

       }
       public string getId() {
          id;
       }


       public string setName() {
         name;
       }

   }

尝试通过序列化;

Try to pass the serializable ;

Bundle bundle = new Bundle();
bundle.putSerializable("student", new Student("1","Mike"));
intent.putExtras(bundle);

得到:

Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();

Student st=(Student )bundle.getSerializable("value");

这篇关于如何使用意图通过自定义列表对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆