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:
。。。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
错误日志已经说得很明显了。你在WXEntryActivity处理的是微信登录的请求,但是你没有对微信Resp的类型做出判断,当你分享请求返回的时候使用的是SendMessageToWX.Resp,而你强制转换成了SendAuth.Resp,所有出错咯。