微信分享遇到的坑和填坑计划

微信分享遇到的坑和解决方案

1、Android 微信分享checkArgs fail, thumbData is invalid

一、问题现象

在做微信分享功能时,分享网页加缩略图时,点击分享一直没反应。经过查看日志

checkArgs fail, thumbData is invalid 出现这样的一个错误提示。

二、原因分析

经过百度一番:原来微信对缩略图的大小进行了限制。超过32K 就会报参数错误!

final boolean checkArgs()

 final boolean checkArgs() {  

     if(this.getType() != 8 || this.thumbData != null && this.thumbData.length != 0) {  
        if(this.getType() == 36 && (this.thumbData == null || this.thumbData.length > 131072)) {  
            Log.e("MicroMsg.SDK.WXMediaMessage", "checkArgs fail, thumbData should not be null or exceed 128kb");  
            return false;  
        } <span style="color:#ff0000;">else if(this.getType() != 36 && this.thumbData != null && this.thumbData.length > '耀') {  
            <strong>Log.e("MicroMsg.SDK.WXMediaMessage", "checkArgs fail, thumbData is invalid");</strong>  
            return false;</span>  
        } else if(this.title != null && this.title.length() > 512) {  
            Log.e("MicroMsg.SDK.WXMediaMessage", "checkArgs fail, title is invalid");  
            return false;  
        } else if(this.description != null && this.description.length() > 1024) {  
            Log.e("MicroMsg.SDK.WXMediaMessage", "checkArgs fail, description is invalid");  
            return false;  
        } else if(this.mediaObject == null) {  
            Log.e("MicroMsg.SDK.WXMediaMessage", "checkArgs fail, mediaObject is null");  
            return false;  
        } else if(this.mediaTagName != null && this.mediaTagName.length() > 64) {  
            Log.e("MicroMsg.SDK.WXMediaMessage", "checkArgs fail, mediaTagName is too long");  
            return false;  
        } else if(this.messageAction != null && this.messageAction.length() > 2048) {  
            Log.e("MicroMsg.SDK.WXMediaMessage", "checkArgs fail, messageAction is too long");  
            return false;  
        } else if(this.messageExt != null && this.messageExt.length() > 2048) {  
            Log.e("MicroMsg.SDK.WXMediaMessage", "checkArgs fail, messageExt is too long");  
            return false;  
        } else {  
            return this.mediaObject.checkArgs();  
        }  
    } else {  
        Log.e("MicroMsg.SDK.WXMediaMessage", "checkArgs fail, thumbData should not be null when send emoji");  
        return false;  
    }  
}  

三、解决方法

修改微信提供的方法:

public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {  
       ByteArrayOutputStream output = new ByteArrayOutputStream();  
       bmp.compress(Bitmap.CompressFormat.PNG, 100, output);  
       if (needRecycle) {  
           bmp.recycle();  
       }  

       byte[] result = output.toByteArray();  
       try {  
           output.close();  
       } catch (Exception e) {  
           e.printStackTrace();  
       }  

       return result;  
   }  

使用这个方法:注意要是还是不行 —-》 将100 调小!!! 至10 试试

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();  
            <strong>localBitmap.compress(Bitmap.CompressFormat.JPEG, 100,  
                    localByteArrayOutputStream);</strong>  
            localBitmap.recycle();  
            byte[] arrayOfByte = localByteArrayOutputStream.toByteArray();  
            try {  
                localByteArrayOutputStream.close();  
                return arrayOfByte;  
            }  catch (Exception e) {  
                // F.out(e);  
            }  
            i = bmp.getHeight();  
            j = bmp.getHeight();  
        }  
    }  

猜你喜欢

转载自blog.csdn.net/bencheng06/article/details/80773510
今日推荐