那些年遇到的bug(2)

bug系列又出炉了,过来瞧瞧啦

1、webview常出现的问题

之前android虚拟机一直都可以直接联网,今天写了一个WebView之后,突然报出了Web page not available的错误,但是查看虚拟机自带的浏览器,是可以上网的,所以检查还是代码的问题,这里给大家列出一些android开发中使用WebView时需要注意的一些小细节,大家共享。

1、首先是出现Web page not available的解决方案:

检查AndroidManifest.xml是否添加了权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET"

添加方法:在与<application>同级的地方添加

<uses-permission android:name="android.permission.INTERNET"/>

2、在要Activity中生成一个WebView组件:

WebView webView = new WebView(this);

3、设置WebView基本信息: 如果访问的页面中有Javascript,则webview必须设置支持Javascript。

 webview.getSettings().setJavaScriptEnabled(true);  

触摸焦点起作用

       requestFocus();

取消滚动条

       this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

4、设置WevView要显示的网页: 互联网用:

webView.loadUrl("http://www.google.com"); 

本地文件用,本地文件存放在:assets文件中

webView.loadUrl("file:///android_asset/XX.html");  

5、如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。 给WebView添加一个事件监听对象(WebViewClient),并重写其中的一些方法 shouldOverrideUrlLoading:对网页中超链接按钮的响应。 当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url

shouldOverrideUrlLoading包含的方法:

  1. onLoadResource
  2. onPageStart
  3. onPageFinish
  4. onReceiveError
  5. onReceivedHttpAuthRequest

6、如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。

    public boolean onKeyDown(int keyCoder,KeyEvent event){
            if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){
                   webview.goBack();   //goBack()表示返回webView的上一页面
                   return true;
                  }
           return false;
       }

2、网络405错误 用andorid的URLHttpConnection类。其他的请求都没有问题,偏偏就这一个请求出405错误。

去网上查,和做服务器交互都木有解决。奇葩的我在java工程里写的代码ok,但是在android工程里相同的代码就出405。

然后尝试着把setDoOutput(true)这句代码注释(默认是false)掉以后,竟然好了。想来想去可能是谷歌对java的URLConnection类做了更改。

这个问题应该很少遇到,写出来的目的是希望大家到时候少浪费一些不必要的时间。注意:在4.0 的版本上可能会出现

3、友盟自动更新未实现

自动更新提示无法安装

在项目中使用自动更新服务,通过调用查看日志的代码。发现以下的日志信息:

04-13 14:29:03.761: I/u.upd.g(9737): 212: response: 
04-13 14:29:03.761: I/u.upd.g(9737): {"update":"Yes","version":"1.0","path":"http://au.apk.umeng.com/uploads/apps/551ca857fd98c51076001a39/_umeng_%40_2_%40_ae5657334c1b05bfad5038796907f3af.apk","origin":"","update_log":"最新版本:2.0\r\n最新版本大小:3320k\r\n更新内容:\r\n1、添加有米广告\r\n2、添加友盟自动更新服务","proto_ver":"1.4","delta":false,"new_md5":"ae5657334c1b05bfad5038796907f3af","size":"3296443","patch_md5":"","target_size":"3296443","display_ads":true}
04-13 14:29:03.761: W/com.umeng.update.UmengUpdateAgent(9737): java.lang.ClassNotFoundException: com.umeng.message.PushAgent: [isIncludesUmengPushSDK]
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atjava.lang.Class.classForName(Native Method)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atjava.lang.Class.forName(Class.java:308)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atjava.lang.Class.forName(Class.java:272)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atcom.umeng.update.UmengUpdateAgent.c(UmengUpdateAgent.java:57)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atcom.umeng.update.UmengUpdateAgent.b(UmengUpdateAgent.java:682)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atcom.umeng.update.UmengUpdateAgent.a(UmengUpdateAgent.java:27)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atcom.umeng.update.UmengUpdateAgent$1.handleMessage(UmengUpdateAgent.java:268)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atandroid.os.Handler.dispatchMessage(Handler.java:102)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atandroid.os.Looper.loop(Looper.java:135)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atandroid.app.ActivityThread.main(ActivityThread.java:5258)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atjava.lang.reflect.Method.invoke(Native Method)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atjava.lang.reflect.Method.invoke(Method.java:372)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
04-13 14:29:03.766: W/com.umeng.update.UmengUpdateAgent(9737):         atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)

分析:可以从以下的几方面去寻找:

1、上传到服务器的版本是否大于当前版本号

2、versioncode和version name的值是否改变

3、是否做了混淆代码的处理 我最后出现的问题就是:代码没有混淆,所以打包后出错了,通过这三步,一步步的排查,最后成功实现了自动更新服务,希望大家认真仔细排查

4、使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATI

由于系统原因,重新安装了系统,但是当我重新运行genymotion的时候,把Android运用部署到上面调试时,

console控制台会报错:

Installation error: INSTALL_FAILED_CPU_ABI_INCOMPATIBLE

这是因为系统里缺少了 Google Play 市场等各种谷歌服务应用,其实是因为版权问题,从 2.0 版本开始 Genymotion 提供的虚拟设备都已经移除了 Google Apps 以及 ARM library support

所以,如果通过软件里下载回来的虚拟机在运行一些必须依靠这些组件运行的 App 时就会出现错误或闪退现象。

解决办法:

  1. 下载Genymotion-ARM-Translation.zip
  2. 运行Genymotion,并start你配置好的virtual device
  3. 将下载好的Genymotion-ARM-Translation.zip直接拖动到virtual device,然后点击ok:
  4. 最后会弹出安装成功的信息

5.关闭virtual device以及Genymotion,重新启动。

再次部署Android应用在上面就可以成功了

5、调试成功、运行失败

在一次项目中,有一个数据迟迟不能出来,后来经过多番的调试,数据结果能运行出来,但是一旦进入直接运行,结果就是显示不出来,通过system输出和打印log都没有发现问题,但是在逐步排查中发现,有一个数据的值没有获取到,但是奇怪的是在调试过程中那个数据的值还是获取到了。所以反复尝试,将代码的位置调整后,结果就出来了。

请注意:一定要先声明;赋值后再去调用。

6、ERROR: 9-patch错误

image D:\test\res\drawable-hdpi\slot_reward_item_mask.9.png malformed

翻译出来的就是这张图片是畸形的,那么就很明显是图片的问题啦,然后查阅资料发现:

原来是.9图没做好,只做了一边,还需要另一边,即左边和上边必须加上。

终于重新处理了.9图片就好了,你们是否遇到过呢?

好了,今天就到此为止了

原文发布于微信公众号 - 猿份到(sparkcliff)

原文发表时间:2017-11-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android 开发者

Android P 行为变更

1692
来自专栏圣杰的专栏

Asp.net mvc 知多少(七)

本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想...

1875
来自专栏帘卷西风的专栏

关于cocos2dx3.0 UITextField不能使用退格键删除字符的解决方案

    近日开始将项目移植到cocos2dx 3.0版本,出现了一些问题,UI方面目前就发现UITextField控件不能响应退格键或者删除键,在Window...

542
来自专栏恰同学骚年

CMS项目实践学习总结

  这个暑假把ITCAST的2011年2月的.NET就业班的视频看了一遍,因为以前把免费的2010版和2011版的视频都看了一遍,所以这次选择了其中的几个部分作...

755
来自专栏移动端开发

iOS 测试三方 KIF 的那些事

一: KIF 三方库的配置       今天的广州天气还不错,原本想试试UI测试的,前几天也了解到很多公司都在用 KIF 这这三方框架!!今天也就试着做做,可就...

1916
来自专栏FreeBuf

Google最新XSS Game Writeup

本文介绍了如何完成谷歌最新的XSSGame的过程,完成了这八个挑战就有机会获得Nexus 5x。实际上这八个挑战总体来说都不难,都是些常见的xss。通关要求是只...

19910
来自专栏WindCoder

SSM笔记(一)框架整合

用了好久了,但都是当初大神配置完后直接粘贴复制过来的,一直没仔细看过相关配置,趁此机会对自己也算是一个复习与深入,也希望对初学者有所帮助。本系列均是基于IDEA...

341
来自专栏云+创业计划

如何用腾讯云打造一款微视频 APP

本文主要讲解了如何将腾讯云提供的音视频上传下载、万象优图图片存储以及处理(缩放、裁剪、水印)等功能集成到了APP和业务端服务器中,打造一款微视频APP。

8121
来自专栏小白安全

FEERBUF--Microsoft Office之DDE攻击

Microsoft Office可以说是使用最广泛的办公软件。然而就是因为这样,也使它成为了黑客的主要攻击目标之一,例如在网络安全对抗赛中红队会用它来窃取域哈...

2606
来自专栏Golang语言社区

用 Go 写一个轻量级的 ssh 批量操作工具

大家都知道 Ansible 是功能超级强大的自动化运维工具,十分的高大上。太高大上了以至于在低端运维有点水土不服,在于三点:

1032

扫描关注云+社区