那些年遇到的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 条评论
登录 后参与评论

相关文章

来自专栏大学生计算机视觉学习DeepLearning

2018最新win10 安装tensorflow1.4(GPU/CPU)+cuda8.0+cudnn8.0-v6 + keras 安装CUDA莫名失败 导入tensorflow失败报错问题解决

原文链接:https://www.cnblogs.com/DOMLX/p/9747019.html

2212
来自专栏大魏分享(微信公众号:david-share)

Openshift 3.11的14大新功能详解

聂健是大魏的红帽同事,本文已获得授权转载,欢迎读者阅读他的技术blog:https://www.cnblogs.com/ericnie/

1703
来自专栏菩提树下的杨过

老生常谈:利用Membership实现SSO(单点登录)

虽然有一些现成的第三方解决方案比如:OpenID,Passport,SpaceCard等都还不错,但是要么就是收费的(passport),要么就是有点用不习惯(...

1825
来自专栏杨建荣的学习笔记

曲折的10g,11g中EM的安装配置过程(r4笔记第98天)

今天在本地搭了一套oracle环境,首先安装数据库的时候顺带了EM,结果安装好之后想修改监听器的端口,把原本15521的端口换成别的,结果在目录中修改了几个参数...

2643
来自专栏wujianqinjian的云

腾讯云API弹性公网IP踩坑

由于自己管理的云服务器数量比较多,时不时需要更换IP,在管理台上一下下点击,实在浪费时间,于是就想到了通过API调用的方式,将更换IP一系列动作,全部集成到Py...

3.4K0
来自专栏信安之路

网络安全渗透测试

针对网络的渗透测试项目一般包括:信息收集、端口扫描、指纹识别、漏洞扫描、绘制网络拓扑、识别代理、记录结果等。下面就一一介绍。

1410
来自专栏码洞

如何优雅的关闭Go Channel【译】

不要在消费端关闭channel,不要在有多个并行的生产者时对channel执行关闭操作。

1603
来自专栏知识分享

八,ESP8266 文件保存数据(基于Lua脚本语言)

应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345.......不过要等一两个星期,先忙完朋友的事情 前面几篇 用AT指令...

3587
来自专栏NetCore

Catalog Service - 解析微软微服务架构eShopOnContainers(三)

上一篇我们说了Identity Service,因为其基于IdentityServer4开发的,所以知识点不是很多,今天我们来看下Catalog Service...

2498
来自专栏有趣的Python

程序员装机必备爆款软件推荐与配置(windows版)

做机也要做一只全能的机哦 值此新年来临之即,面对两百多个G的c盘。忍痛割爱将电脑系统重装,版本为(win10:1079)之后的所有电脑环境更新,专业软件安装均会...

3603

扫码关注云+社区