首页 > Android微信分享的成功但报错

Android微信分享的成功但报错

在app里加入微信分享的功能,之前还是没问题的,但现在发现在一些机型上
(1)点击分享给好友后,选择返回应用则报错,但它是发送成功的
(2)点击分享到朋友圈后就报错,同样它也是发送成功的

(ActivityA —— ActivityB(Fragment) —— 点击分享 ————分享成功 ————报错 ————ActivityA)
即分享成功后,它应该是返回到ActivityB的Fragment页面的。

请问是出了什么问题,做分享的功能跟WXEntryActivity有关吗,因为我的WXEntryActivity里是有用于处理微信用户登录的?

分享代码

@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        //分享给微信好友
        case R.id.weChat_friends:{
            
            //构建链接信息的分享对象
            WXWebpageObject webpageObject = new WXWebpageObject();
            webpageObject.webpageUrl = shareUrl;
            
            //将webpageObject分装到WXMediaMessage里
            WXMediaMessage mediaMessage = new WXMediaMessage();
            mediaMessage.mediaObject = webpageObject;
            mediaMessage.description = description ;
            mediaMessage.setThumbImage(bitmap);
            
            //构建发送请求
            SendMessageToWX.Req req = new SendMessageToWX.Req();
            //设置发送场景为分享给微信好友
            req.scene = SendMessageToWX.Req.WXSceneSession;
            //设置该事务为唯一事务(因为时间只有一个)
            req.transaction = String.valueOf(System.currentTimeMillis());
            //将封装好的WXMediaMessage再封装给SendMessageToWX.Req
            req.message = mediaMessage;
            
            //通过IWXAPI发送请求
            MyApplication.api.sendReq(req);
            
            
            break;
        }

        //分享到微信朋友圈
        case R.id.weChat_TimeLine:{
            WXWebpageObject webpageObject = new WXWebpageObject();
            webpageObject.webpageUrl = shareUrl;  
            
             WXMediaMessage mediaMessage = new WXMediaMessage();
                mediaMessage.mediaObject = webpageObject;
                mediaMessage.title = title;
                mediaMessage.setThumbImage(bitmap);
            
            SendMessageToWX.Req req = new SendMessageToWX.Req();
           
            req.scene = SendMessageToWX.Req.WXSceneTimeline;
            
            req.transaction = String.valueOf(System.currentTimeMillis());
            req.message = mediaMessage;
            
            
            MyApplication.api.sendReq(req);
            
            
            break;
        }
        default:
            break;
        }
        
    }

WXEntryActivity里关于ERR_OK处理的代码,这里只是对微信用户做了操作,只是获取到该用户的相关信息

public void onResp(BaseResp arg0) {
            
            switch (arg0.errCode ) {
            //同意授权
            case BaseResp.ErrCode.ERR_OK:
                SendAuth.Resp resp = (Resp) arg0;
                //获得code
                String code = resp.code;
                
                
                //把code,APPID,APPSECRET替换到要请求的地址里,成为新的请求地址
                newGetCodeRequest = getCodeRequest(code);
                
                //请求新的地址,解析相关数据,包括openid,acces_token等
                HttpUtil.sendHttpRequest(newGetCodeRequest , new HttpCallbackListener() {                
                    @Override
                    public void onFinish(String response) {
                    
                        //Log.d("WXActivity", response);
                        
                        parseAccessTokenJSON(response);
                        
                        //将解析得到的access_token和openid在请求unionid地址里替换
                        newGetUnionIDRequest = getUnionID(mAccess_token, mOpenId);
                        
                        //请求新的unionid地址,解析出返回的unionid等数据
                        HttpUtil.sendHttpRequest(newGetUnionIDRequest  , new HttpCallbackListener() {
                            
                            @Override
                            public void onFinish(String response) {
                                
                                parseUnionIdJson(response);
                                
                                                        
                            }                

                            @Override
                            public void onError(Exception e) {
                                
                                
                            }
                        });
                        
                    }

                    @Override
                    public void onError(Exception e) {
                        // TODO Auto-generated method stub
                        
                    }
                });
                
//                new Thread(new Runnable() {                    
//                    @Override
//                    public void run() {
//                        // TODO Auto-generated method stub
//                        try {
//                            Thread.sleep(1000);
//                        } catch (InterruptedException e) {
//                            // TODO Auto-generated catch block
//                            e.printStackTrace();
//                        }
//                        WXEntryActivity.this.finish();
//                    }
//                }).start();
                
                Timer timer = new Timer();
                TimerTask task= new TimerTask() {
                    
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        WXEntryActivity.this.finish();
                    }
                };
                timer.schedule(task, 2000);
                
                
                break;
                }

感谢 有明 的解答,这是修改后的部分代码:

@Override
        public void onResp(BaseResp arg0) {
            
           //关于数值的类型,微信官方文档里有写:
           //发送OpenAPI Auth验证 的数值为 1
           //分享消息到微信 的数值为2
            if(arg0.getType() == 2){
                finish();
            }
            if(arg0.getType() == 1){
                SendAuth.Resp respLogin = (Resp) arg0;
                //获得code
            String code = respLogin.code;
            
            switch (arg0.errCode ) {
            //同意授权
            case BaseResp.ErrCode.ERR_OK:

。。。。。。

错误日志已经说得很明显了。你在WXEntryActivity处理的是微信登录的请求,但是你没有对微信Resp的类型做出判断,当你分享请求返回的时候使用的是SendMessageToWX.Resp,而你强制转换成了SendAuth.Resp,所有出错咯。

【热门文章】
【热门文章】