断网情况下友盟 微博分享崩溃

具体的报错内容如下


E/MainApplication.java: [(MainApplication.java:86)#uncaughtException]uncaught exception
                                                                          java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.umeng.socialize.net.LinkCardResponse.url' on a null object reference
                                                                              at com.umeng.socialize.media.SinaShareContent.getWebpageObj(SinaShareContent.java:138)
                                                                              at com.umeng.socialize.media.SinaShareContent.getMessage(SinaShareContent.java:45)
                                                                              at com.umeng.socialize.handler.SinaSsoHandler.share(SinaSsoHandler.java:327)
                                                                              at com.umeng.socialize.controller.SocialRouter.share(SocialRouter.java:748)
                                                                              at com.umeng.socialize.UMShareAPI$4.doInBackground(UMShareAPI.java:203)
                                                                              at com.umeng.socialize.UMShareAPI$4.doInBackground(UMShareAPI.java:194)
                                                                              at com.umeng.socialize.common.QueuedWork$UMAsyncTask$1.run(QueuedWork.java:141)
                                                                              at java.lang.Thread.run(Thread.java:818)

代码中调用的地方大致如下:

new ShareAction(activity).withMedia(web)
                    .setPlatform(platform)
                    .setCallback(umShareListener)
                    .share();

经过分析,崩溃的线程和调用并非在同一个线程,此时try catch调用的地方来阻止崩溃是没用的。

最后,通过跟踪源码,发现最终调用分享的代码是SinaSsoHandlershare()函数,解决思路是自己创建一个SinaSsoHandler,通过反射注入到友盟的源码里面,替换掉原有的SinaSsoHandler,复写share()

代码如下:


try {
            UMShareAPI umShareAPI = UMShareAPI.get(getContext());
            Field socialRouterField = umShareAPI.getClass().getDeclaredField("router");
            socialRouterField.setAccessible(true);
            Object socialRouterObj = socialRouterField.get(umShareAPI);

            Field platformHandlersHandlerField = SocialRouter.class.getDeclaredField("platformHandlers");
            platformHandlersHandlerField.setAccessible(true);
            Object platformHandlersHandlerObj = platformHandlersHandlerField.get(socialRouterObj);
            Map<SHARE_MEDIA, UMSSOHandler> platformHandlers = (Map<SHARE_MEDIA, UMSSOHandler>) platformHandlersHandlerObj;
            platformHandlers.put(SHARE_MEDIA.SINA, new SinaSsoHandler(){
                @Override
                public boolean share(ShareContent content, UMShareListener listener) {
                    try{
                        return super.share(content, listener);
                    }catch (Exception e){
                        e.printStackTrace();
                        TaskExecutors.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toaster.show("分享失败");
                            }
                        });
                        return false;
                    }
                }
            });

            new ShareAction(activity).withMedia(web)
                    .setPlatform(platform)
                    .setCallback(umShareListener)
                    .share();
        }catch (Exception e){
            e.printStackTrace();
        }

可以预见的缺点是 如果友盟的sdk有更新,这段反射代码可能就会失效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,472评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,467评论 4 61
  • 3月份,《超级个体》专栏曾讲过“事后复盘是持续精进的重要法门”,是的,常言道“温故知新”、“前事不忘,后事之师”。...
    朱燕飞阅读 477评论 0 0
  • 蝉鸣,朝云,白云,夜月。暑假的前半部分,在一个陌生而熟悉的教室里悠悠的过了。没来到这个学校时从别人的口里大概了解这...
    林深阳阅读 260评论 0 0
  • 成人之美无价!有钱阶级抱团筹钱禁止陌生人网络社交抱团!世界大战的罪魁祸首→社交网络大佬!户口地征婚!城里缺女人,农...
    3501942d86d5阅读 300评论 0 0

友情链接更多精彩内容