package com.photoshare.service.photos; import java.text.SimpleDateFormat; import java.util.ArrayList; import org.json.JSONArray; import org.json.JSONObject; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import com.photoshare.exception.NetworkException; import com.photoshare.service.comments.CommentInfo; /** * 对相片实体Bean的封装<br> * * 注:不继承ResponseBean * */ public class PhotoBean implements Parcelable { /** * 字段常量 */ public static final String KEY_PID = "pid"; public static final String KEY_FILE_NAME = "fileName"; public static final String KEY_UID = "uid"; public static final String KEY_UNAME = "uname"; public static final String KEY_UHEAD_URL = "tinyUrl"; public static final String KEY_CAPTION = "caption"; public static final String KEY_CREATE_TIME = "createTime"; public static final String KEY_LIKES_COUNT = "likesCount"; public static final String KEY_IS_LIKE = "isLike"; public static final String KEY_COMMENT_COUNT = "commentCount"; public static final String KEY_TINY_URL = "tinyurl"; public static final String KEY_MIDDLE_URL = "url"; public static final String KEY_LARGE_URL = "largeurl"; public static final String KEY_CONTENT = "content"; public static final String KEY_COMMENTS = "comments"; public static final String KEY_PHOTO = "photo"; public static final String KEY_PHOTOS = "photos"; public static final String KEY_PHOTO_TYPE = "type"; public static final String ABSOLUTE_PATH_TAG = "path"; /** * 照片id */ private long pid; /** * 照片文件名 注:此名代表上传到服务器上的建议文件名,系统实际上可忽略,这个参数的主要作用是在上传的时候识别文件类型,所以名字可以随便取, * 但类型一定要设置正确 */ private String fileName; /** * 一张照片的所有者用户id */ private long uid; /** * 所有者的姓名 * */ private String uname; /** * */ private String tinyHeadUrl; /** * 照片的描述 */ private String caption; /** * 照片的创建时间 */ private String createTime; /** * 照片的浏览数 */ private int likesCount; /** * 照片的评论数 */ private int commentCount; /** * 这几个都是同意图片不同的尺寸的图片的url地址 * * 100*150相册列表中的大小,url源地址 */ private String urlTiny; /** * 200*300 封面大小,url源地址 */ private String urlHead; /** * 600*900正常相片,url源地址 */ private String urlLarge; private String absolutePath; private boolean isLike; private ArrayList<CommentInfo> comments = new ArrayList<CommentInfo>(); /** * 图片的二进制数据 */ private byte[] content; public PhotoBean() { } public PhotoBean(long pid) { this.pid = pid; } public PhotoBean parse(JSONObject object) throws NetworkException { if (object == null) { return null; } pid = object.optLong(KEY_PID); uid = object.optLong(KEY_UID); uname = object.optString(KEY_UNAME); fileName = object.optString(KEY_FILE_NAME); tinyHeadUrl = object.optString(KEY_UHEAD_URL); caption = object.optString(KEY_CAPTION); content = (byte[]) object.opt(KEY_CONTENT); createTime = object.optString(KEY_CREATE_TIME); commentCount = object.optInt(KEY_COMMENT_COUNT); likesCount = object.optInt(KEY_LIKES_COUNT); isLike = object.optBoolean(KEY_IS_LIKE); urlTiny = object.optString(KEY_TINY_URL); urlHead = object.optString(KEY_MIDDLE_URL); urlLarge = object.optString(KEY_LARGE_URL); JSONArray array = object.optJSONArray(KEY_COMMENTS); if (array == null) { return this; } for (int i = 0; i < array.length(); i++) { comments.add(new CommentInfo().parse(array.optJSONObject(i))); } return this; } @Override public String toString() { StringBuilder sb = new StringBuilder(); SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); sb.append(KEY_PID).append(" = ").append(pid).append("\r\n"); sb.append(KEY_UID).append(" = ").append(uid).append("\r\n"); sb.append(KEY_UNAME).append(" = ").append(uname).append("\r\n"); sb.append(KEY_CAPTION).append(" = ").append(caption).append("\r\n"); // sb.append(KEY_CREATE_TIME).append(" = ").append(sdf.format(createTime)) // .append("\r\n"); sb.append(KEY_CREATE_TIME).append(" = ").append(createTime) .append("\r\n"); sb.append(KEY_LIKES_COUNT).append(" = ").append(likesCount) .append("\r\n"); sb.append(KEY_COMMENT_COUNT).append(" = ").append(commentCount) .append("\r\n"); sb.append(KEY_TINY_URL).append(" = ").append(urlTiny).append("\r\n"); sb.append(KEY_MIDDLE_URL).append(" = ").append(urlHead).append("\r\n"); sb.append(KEY_LARGE_URL).append(" = ").append(urlLarge).append("\r\n"); return sb.toString(); } public int describeContents() { return 0; } public void writeToParcel(Parcel dest, int flag) { Bundle bundle = new Bundle(); if (pid != 0) { bundle.putLong(KEY_PID, pid); } if (fileName != null) { bundle.putString(KEY_FILE_NAME, fileName); } if (uid != 0) { bundle.putLong(KEY_UID, uid); } if (uname != null) { bundle.putString(KEY_UNAME, uname); } if (tinyHeadUrl != null) { bundle.putString(KEY_UHEAD_URL, tinyHeadUrl); } if (caption != null) { bundle.putString(KEY_CAPTION, caption); } if (createTime != null) { bundle.putSerializable(KEY_CREATE_TIME, createTime); } bundle.putInt(KEY_LIKES_COUNT, likesCount); bundle.putBoolean(KEY_IS_LIKE, isLike); bundle.putInt(KEY_COMMENT_COUNT, commentCount); if (urlTiny != null) { bundle.putString(KEY_TINY_URL, urlTiny); } if (urlHead != null) { bundle.putString(KEY_MIDDLE_URL, urlHead); } if (urlLarge != null) { bundle.putString(KEY_LARGE_URL, urlLarge); } if (comments != null) { bundle.putParcelableArrayList(KEY_COMMENTS, comments); } // 一般不传递content,因为内容可能太大 if (content != null) { bundle.putByteArray(KEY_CONTENT, content); } dest.writeBundle(bundle); } public static final Parcelable.Creator<PhotoBean> CREATOR = new Parcelable.Creator<PhotoBean>() { public PhotoBean createFromParcel(Parcel in) { return new PhotoBean(in); } public PhotoBean[] newArray(int size) { return new PhotoBean[size]; } }; /** * 构造函数,根据序列化对象构造实例 * * @param in */ public PhotoBean(Parcel in) { Bundle bundle = in.readBundle(); if (bundle.containsKey(KEY_PID)) { pid = bundle.getLong(KEY_PID); } if (bundle.containsKey(KEY_FILE_NAME)) { fileName = bundle.getString(KEY_FILE_NAME); } if (bundle.containsKey(KEY_UID)) { uid = bundle.getLong(KEY_UID); } if (bundle.containsKey(KEY_UNAME)) { uname = bundle.getString(KEY_UNAME); } if (bundle.containsKey(KEY_CAPTION)) { caption = bundle.getString(KEY_CAPTION); } if (bundle.containsKey(KEY_CREATE_TIME)) { createTime = bundle.getString(KEY_CREATE_TIME); } likesCount = bundle.getInt(KEY_LIKES_COUNT); commentCount = bundle.getInt(KEY_COMMENT_COUNT); isLike = bundle.getBoolean(KEY_IS_LIKE); if (bundle.containsKey(KEY_TINY_URL)) { urlTiny = bundle.getString(KEY_TINY_URL); } if (bundle.containsKey(KEY_MIDDLE_URL)) { urlHead = bundle.getString(KEY_MIDDLE_URL); } if (bundle.containsKey(KEY_LARGE_URL)) { urlLarge = bundle.getString(KEY_LARGE_URL); } if (bundle.containsKey(KEY_CONTENT)) { content = bundle.getByteArray(KEY_CONTENT); } if (bundle.containsKey(KEY_UHEAD_URL)) { tinyHeadUrl = bundle.getString(KEY_UHEAD_URL); } } public Bundle params() { Bundle param = new Bundle(); param.putParcelable(PhotoBean.KEY_PHOTO, this); return param; } public long getPid() { return pid; } public void setPid(long pid) { this.pid = pid; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public long getUid() { return uid; } public void setUid(long uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getCaption() { return caption; } public void setCaption(String caption) { this.caption = caption; } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime; } public int getLikesCount() { return likesCount; } public void setLikesCount(int likesCount) { this.likesCount = likesCount; } public int getCommentCount() { return commentCount; } public void setCommentCount(int commentCount) { this.commentCount = commentCount; } public String getUrlTiny() { return urlTiny; } public void setUrlTiny(String urlTiny) { this.urlTiny = urlTiny; } public String getUrlHead() { return urlHead; } public void setUrlHead(String urlHead) { this.urlHead = urlHead; } public String getUrlLarge() { return urlLarge; } public void setUrlLarge(String urlLarge) { this.urlLarge = urlLarge; } public byte[] getContent() { return content; } public void setContent(byte[] content) { this.content = content; } public String getAbsolutePath() { return absolutePath; } public void setAbsolutePath(String absolutePath) { this.absolutePath = absolutePath; } public ArrayList<CommentInfo> getComments() { return comments; } public void setComments(ArrayList<CommentInfo> comments) { this.comments = comments; } public String getTinyHeadUrl() { return tinyHeadUrl; } public void setTinyHeadUrl(String tinyHeadUrl) { this.tinyHeadUrl = tinyHeadUrl; } public boolean isLike() { return isLike; } public void setLike(boolean isLike) { this.isLike = isLike; } }