之前做了个微信分享,隔了一段时间突然发现提示下面错误:
MicroMsg.SDK.WXMediaMessage: checkArgs fail, thumbData is invalid
MicroMsg.SDK.WXApiImplV10: sendReq checkArgs fail
网上查询了目前看到两种解决方法:
1、分享图片大小不能大于32kb。
2、修改以下代码:
public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(CompressFormat.PNG, 100, output);
if (needRecycle) {
bmp.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
现将其改成如下所示的:
public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
int i;
int j;
if (bmp.getHeight() > bmp.getWidth()) {
i = bmp.getWidth();
j = bmp.getWidth();
} else {
i = bmp.getHeight();
j = bmp.getHeight();
}
Bitmap localBitmap = Bitmap.createBitmap(i, j, Bitmap.Config.RGB_565);
Canvas localCanvas = new Canvas(localBitmap);
while (true) {
localCanvas.drawBitmap(bmp, new Rect(0, 0, i, j), new Rect(0, 0,i, j), null);
if (needRecycle)
bmp.recycle();
ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream();
localBitmap.compress(Bitmap.CompressFormat.JPEG, 100,
localByteArrayOutputStream);
localBitmap.recycle();
byte[] arrayOfByte = localByteArrayOutputStream.toByteArray();
try {
localByteArrayOutputStream.close();
return arrayOfByte;
} catch (Exception e) {
//F.out(e);
}
i = bmp.getHeight();
j = bmp.getHeight();
}
事实证明,这两种方法并没有解决我的问题。
在使用第一种方法时并不能解决我的问题,在使用第二种方法时,按照官方demo的方法把图片的大小设置成150*150之后是可以的(不管以前大小多少),我们的图标是300*300并且是需要网络获取,大小也超过了32kb。
我是通过下面这种方法解决的,在获取网络图标的时候使用demo中Util类中getHtmlByteArray(final String url)方法,直接把网络数据转换成byte[]格式,然后转换成Bitmap,
BitmapFactory.decodeByteArray(Util.getHtmlByteArray(imgUrl),300,300)
然后在设置的时候使用
mediaMessage.thumbData = Util.bmpToByteArray(bitmap, true);
这样在分享时就不会报错