android 融云消息自定义ui,【分享】融云2.0如何实现文件发送

本文详细解读了Java中的FileMessage类,包括其构造、方法和序列化过程。重点介绍了如何创建、存储缩略图和本地/网络图片地址,以及如何处理上传失败情况。适合理解Android或网络通信中消息传递的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

public FileMessage() {

}

private FileMessage(Uri thumbUri, Uri localUri) {

mThumUri = thumbUri;

mLocalUri = localUri;

}

private FileMessage(Uri thumbUri, Uri localUri, boolean original) {

mThumUri = thumbUri;

mLocalUri = localUri;

mIsFull = original;

}

/**

* 生成FileMessage对象。

*

*/

public static FileMessage obtain(Uri thumUri, Uri localUri) {

return new FileMessage(thumUri, localUri);

}

/**

* 生成FileMessage对象。

*

*/

public static FileMessage obtain(Uri thumUri, Uri localUri, boolean isFull) {

return new FileMessage(thumUri, localUri, isFull);

}

/**

* 生成FileMessage对象。

*

* @return ImageMessage对象实例。

*/

public static FileMessage obtain() {

return new FileMessage();

}

/**

* 获取缩略图Uri。

*

* @return 缩略图Uri(收消息情况下此为内部Uri,需要通过ResourceManager.getInstance().getFile(new Resource(Uri))方式才能获取到真实地址)。

*/

public Uri getThumUri() {

return mThumUri;

}

/**

*

* @return true / false

*/

public boolean isFull() {

return mIsFull;

}

/**

* 设置发送原图标志位。

*

*/

public void setIsFull(boolean isFull) {

this.mIsFull = isFull;

}

/**

* 设置缩略图Uri。

*

* @param thumUri 缩略图地址

*/

public void setThumUri(Uri thumUri) {

this.mThumUri = thumUri;

}

/**

* 获取本地图片地址(file:///)。

*

* @return 本地图片地址(file:///)。

*/

public Uri getLocalUri() {

return mLocalUri;

}

/**

* 设置本地图片地址(file:///)。

*

* @param localUri 本地图片地址(file:///).

*/

public void setLocalUri(Uri localUri) {

this.mLocalUri = localUri;

}

/**

* 获取网络图片地址(http://)。

*

* @return 网络图片地址(http://)。

*/

public Uri getRemoteUri() {

return mRemoteUri;

}

/**

* 设置网络图片地址(http://)。

*

* @param remoteUri 网络图片地址(http://)。

*/

public void setRemoteUri(Uri remoteUri) {

this.mRemoteUri = remoteUri;

}

/**

* 设置需要传递的Base64数据

*

* @param base64 base64数据。

*/

public void setBase64(String base64) {

mBase64 = base64;

}

/**

* 获取需要传递的Base64数据。

*

* @return base64数据。

*/

public String getBase64() {

return mBase64;

}

/**

* 是否上传失败。

*

* @return 是否上传失败。

*/

public boolean isUpLoadExp() {

return mUpLoadExp;

}

/**

* 设置是否上传失败。

*

* @param upLoadExp 上传是否失败。

*/

public void setUpLoadExp(boolean upLoadExp) {

this.mUpLoadExp = upLoadExp;

}

@Override

public byte[] encode() {

JSONObject jsonObj = new JSONObject();

try {

if (!TextUtils.isEmpty(mBase64)) {

jsonObj.put("content", mBase64);

} else {

Log.d("ImageMessage", "base64 is null");

}

if (mRemoteUri != null) {

jsonObj.put("fileUri", mRemoteUri.toString());

} else if (getLocalUri() != null) {

jsonObj.put("fileUri", getLocalUri().toString());

}

if (mUpLoadExp) {

jsonObj.put("exp", true);

}

jsonObj.put("isFull", mIsFull);

if (!TextUtils.isEmpty(getExtra()))

jsonObj.put("extra", getExtra());

if (getJSONUserInfo() != null)

jsonObj.putOpt("user", getJSONUserInfo());

} catch (JSONException e) {

Log.e("JSONException", e.getMessage());

}

mBase64 = null;

return jsonObj.toString().getBytes();

}

/**

* 描述了包含在 Parcelable 对象排列信息中的特殊对象的类型。

*

* @return 一个标志位,表明Parcelable对象特殊对象类型集合的排列。

*/

@Override

public int describeContents() {

return 0;

}

/**

* 构造函数。

*

* @param in 初始化传入的 Parcel。

*/

public FileMessage(Parcel in) {

setExtra(ParcelUtils.readFromParcel(in));

mLocalUri = ParcelUtils.readFromParcel(in, Uri.class);

mRemoteUri = ParcelUtils.readFromParcel(in, Uri.class);

mThumUri = ParcelUtils.readFromParcel(in, Uri.class);

setUserInfo(ParcelUtils.readFromParcel(in, UserInfo.class));

mIsFull = ParcelUtils.readIntFromParcel(in) == 1;

}

/**

* 将类的数据写入外部提供的 Parcel 中。

*

* @param dest 对象被写入的 Parcel。

* @param flags 对象如何被写入的附加标志,可能是 0 或 PARCELABLE_WRITE_RETURN_VALUE。

*/

@Override

public void writeToParcel(Parcel dest, int flags) {

ParcelUtils.writeToParcel(dest, getExtra());

ParcelUtils.writeToParcel(dest, mLocalUri);

ParcelUtils.writeToParcel(dest, mRemoteUri);

ParcelUtils.writeToParcel(dest, mThumUri);

ParcelUtils.writeToParcel(dest, getUserInfo());

ParcelUtils.writeToParcel(dest, mIsFull ? 1 : 0);

}

/**

* 读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。

*/

public static final Creator CREATOR = new Creator() {

@Override

public FileMessage createFromParcel(Parcel source) {

return new FileMessage(source);

}

@Override

public FileMessage[] newArray(int size) {

return new FileMessage[size];

}

};

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值