微信SDK圖片分享(checkArgs fail, thumbData is invalid)


微信官網給的Demo中。圖片的分享例子他是這么描述的:

                            String url = "http://pic2.nipic.com/20090506/1478953_125254084_2.jpg";
                                
                             try{
                                WXImageObject imgObj =  new WXImageObject();
                                imgObj.imageUrl = url;
                                
                                WXMediaMessage msg =  new WXMediaMessage();
                                msg.mediaObject = imgObj;

                                Bitmap bmp = BitmapFactory.decodeStream( new URL(url).openStream());
                                Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE,  true);
                                bmp.recycle();
                                msg.thumbData = Util.bmpToByteArray(thumbBmp,  true);
                                
                                SendMessageToWX.Req req =  new SendMessageToWX.Req();
                                req.transaction = buildTransaction("img");
                                req.message = msg;
                                req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
                                api.sendReq(req);
                                
                                 // finish();
                            }  catch(Exception e) {
                                e.printStackTrace();
                                Toast.makeText(SendToWXActivity. this, "Error msg"+e.toString(), 1000).show();
                            }
                    
                             break;
                        

 

 而在實際的使用過程中,總是報這樣的一個錯誤,怎么也調用不到微信的分享界面。


 

05-06 10:21:35.276: E/MicroMsg.SDK.WXMediaMessage(19273): checkArgs fail, thumbData is invalid

 好像是圖片處理那邊出現了問題。細看這個代碼。里面有一個將bitmap對象轉化成byte數據字節的對象。原先的代碼是這樣的如下所示:

 

     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();
        }
    }

 

現在就可以對圖片進行分享了。 有更好的解決辦法,希望可以留言 !!!

 

還有一個文章寫得不錯: http://www.eoeandroid.com/thread-310556-1-1.html

 

 

 源碼下載地址:http://pan.baidu.com/s/1dDEbPvj

                    iqct

 

 

 

 

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM