在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,所有出错咯。