首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >那些年遇到的bug(2)

那些年遇到的bug(2)

作者头像
用户1337002
发布于 2018-03-09 02:31:40
发布于 2018-03-09 02:31:40
95300
代码可运行
举报
文章被收录于专栏:猿份到猿份到
运行总次数:0
代码可运行

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

1、webview常出现的问题

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<uses-permission android:name="android.permission.INTERNET"/>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WebView webView = new WebView(this);

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 webview.getSettings().setJavaScriptEnabled(true);  

触摸焦点起作用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       requestFocus();

取消滚动条

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
webView.loadUrl("http://www.google.com"); 

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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、友盟自动更新未实现

自动更新提示无法安装

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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控制台会报错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
image D:\test\res\drawable-hdpi\slot_reward_item_mask.9.png malformed

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

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

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

好了,今天就到此为止了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猿份到 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Android笔记】浅谈WebView
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:
易寒
2021/12/27
1.2K0
Android开发必知--WebView加载html5实现炫酷引导页面
  大多数人都知道,一个APP的引导页面还是挺重要的,不过要想通过原生的Android代码做出一个非常炫酷的引导页相对还是比较复杂的,正巧html5在制作炫酷动画网页方面比较给力,我们不妨先利用htm
codingblock
2017/12/29
3.7K0
Android开发必知--WebView加载html5实现炫酷引导页面
Android实现WebView加载assets文件夹下的html文件,html返回webView.canGo,android嵌入h5进行交互,调试错误 net::ERR_FILE_NOT_FOUND
我的环境:win7 ,Android studio 3.0.1.   java8;
zhangjiqun
2024/12/16
4150
那些年在WebView上踩过的坑
之前我在Android中使用WebView与JS交互全解析一文中,介绍了通过Webview和JS的交互方式,但Webview这个控件简直是让人又爱又恨,各种你想不到的错误在各种奇怪的手机上,各种不一样的版本里,所以我想通过这篇博客总结Webview开发中的不得不注意的一些坑。
老马的编程之旅
2022/06/22
2.4K0
那些年在WebView上踩过的坑
Android webView打开网页
这个就比较简单了,直接拖一个控件,再加载一下url,记得在AndroidManifest.xml中加一下权限
SingYi
2022/07/13
2.7K0
Android webView打开网页
android的正则实现 不支持在逆序环视中的无限匹配
android的正则实现 不支持在逆序环视中的无限匹配,即使用*或+,可以使用区间量词{n,m},其中m的的最大值不能为Integer.MAX_VALUE,区间的最大值在本例中可为10,11就不行了:
用户7108768
2021/09/24
5830
Android ANR 分析学习总结
1. 什么情况下会发生anr (1). KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应 (2). BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成 (3). ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成 2. KeyDispatchTimeout超时原因 (1). 当前的事件没有机会得到处理(即UI线程正在处理
用户1127566
2018/06/06
2.3K0
史上最全webview详解
WebView在现在的项目中使用的频率应该还是非常高的。 我个人总觉得HTML5是一种趋势。找了一些东西,在此总结。 本篇最后有一个非常不错 的 Html5Activity 加载类,不想看的可以直接跳下载。 WebSettings WebSettings webSettings = mWebView .getSettings(); //支持获取手势焦点,输入用户名、密码或其他 webview.requestFocusFromTouch(); setJavaScriptEnabled(true);
xiangzhihong
2018/02/01
7K0
android WebView总结
浏览器控件是每一个开发环境都具备的,这为马甲神功提供了用武之地。windows的有webbrowser,android和ios都有webview。仅仅是其引擎不同,相对于微软的webbrowser。android及ios的webview的引擎都是webkit,对Html5提供支持。本篇主要介绍android的webview之强大。
全栈程序员站长
2022/07/14
1.1K0
android WebView总结
android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord)
09-03 16:55:16.820:E/AndroidRuntime(16873): FATAL EXCEPTION: main
wust小吴
2019/07/05
7570
这是一份Android全面&详细的-Webview使用攻略
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sNTzdRBr-1640421131904)(https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2017/5/24/96d6b5ac37d63dcc0d7689c9e33fff57~tplv-t2oaga2asx-watermark.image)]
用户9253515
2021/12/25
5.7K2
Android:最全面的 Webview 详解
注意: 每个 Application 只调用一次 WebSettings.setAppCachePath(),WebSettings.setAppCacheMaxSize()
Carson.Ho
2019/02/22
4.8K0
安卓原生与hml交互(WebView基础)
在Android4.2以上可以直接使用@JavascriptInterface注解来声明,下面是在一个本地Java方法
用户2038589
2018/09/06
1.9K0
Android中使用WebView与JS交互全解析
首先,需要提出一个概念,那就是hybrid,主要意思就是native原生Android和h5混合开发。为什么要这样做呢?大家可以想象一下针对于同一个活动,如果使用纯native的开发方式,Android和iOS两边都要维护同一套界面甚至是逻辑,这样开发和维护的成本会很大,而使用hybrid的开发方式的话,让前端的同学去写一套界面和逻辑,对于native端来说只要使用对应的容器去展示就可以了(对于Android来说这个容器当然就是WebView)。那为什么不所有的页面都使用这种方式开发呢?因为使用h5来展示界面的话用户体验始终是不如native的,所以在这两者之间我们需要一个权衡。
老马的编程之旅
2022/06/22
2K0
Android中使用WebView与JS交互全解析
Android WebView 与Js交互,混合开发基础
WebChromeClient:当影响【浏览器】的事件到来时,就会通过WebChromeClient中的方法回调通知用法。
对话、
2022/02/22
3.5K0
Android WebView 与Js交互,混合开发基础
webview加载应用宝 网页版界面,简单实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/47952991
泥豆芽儿 MT
2018/09/11
1.8K0
webview加载应用宝 网页版界面,简单实现
android 系统浏览器 源码-Android 最最最简单的浏览器代码
  学了之后,心血来潮,写了这个简易的浏览器。虽然很简单,但是也查了不少没学到东西。大神就忽略吧。这里分享出来,给需要的人参考参考。
宜轩
2022/12/29
1.6K0
混合开发之WebView秘笈
注意: 每个 Application 只调用一次 WebSettings.setAppCachePath(),WebSettings.setAppCacheMaxSize()
蜻蜓队长
2018/08/03
2.2K0
混合开发之WebView秘笈
Android开发工程师文集-Android知识点讲解
大家好,我是 Vic,今天给大家带来Android开发工程师文集-Android知识点讲解的概述,希望你们喜欢
达达前端
2019/07/03
4490
Android调试的各种bug
09-20 17:55:38.457: E/AndroidRuntime(14963): FATAL EXCEPTION: main 09-20 17:55:38.457: E/AndroidRuntime(14963): Process: com.clockrock.freeshare, PID: 14963 09-20 17:55:38.457: E/AndroidRuntime(14963): java.lang.NoSuchMethodError: com.clockrock.tieba.WritePostActivity.getDrawable 09-20 17:55:38.457: E/AndroidRuntime(14963): at com.clockrock.tieba.WritePostActivity.onCreate(WritePostActivity.java:236) 09-20 17:55:38.457: E/AndroidRuntime(14963): at android.app.Activity.performCreate(Activity.java:5451) 09-20 17:55:38.457: E/AndroidRuntime(14963): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097) 09-20 17:55:38.457: E/AndroidRuntime(14963): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2346) 09-20 17:55:38.457: E/AndroidRuntime(14963): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2443) 09-20 17:55:38.457: E/AndroidRuntime(14963): at android.app.ActivityThread.access$800(ActivityThread.java:157) 09-20 17:55:38.457: E/AndroidRuntime(14963): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 09-20 17:55:38.457: E/AndroidRuntime(14963): at android.os.Handler.dispatchMessage(Handler.java:110) 09-20 17:55:38.457: E/AndroidRuntime(14963): at android.os.Looper.loop(Looper.java:193) 09-20 17:55:38.457: E/AndroidRuntime(14963): at android.app.ActivityThread.main(ActivityThread.java:5348) 09-20 17:55:38.457: E/AndroidRuntime(14963): at java.lang.reflect.Method.invokeNative(Native Method) 09-20 17:55:38.457: E/AndroidRuntime(14963): at java.lang.reflect.Method.invoke(Method.java:515) 09-20 17:55:38.457: E/AndroidRuntime(14963): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 09-20 17:55:38.457: E/AndroidRuntime(14963): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 09-20 17:55:38.457: E/AndroidRuntime(14963): at dalvik.system.NativeStart.main(Native Method) 错误原因:actionbar导致的问题,theme用了自定义的方法, 09-21 20:47:27.169: V/ActivityThread(1
wust小吴
2019/07/08
7270
相关推荐
【Android笔记】浅谈WebView
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档