Android代码报错汇总

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mike_Cui_LS/article/details/78910533

本帖子是个人开发中遇到的错误,会在此处做一个记录,会持续更新。

1. 导入依赖时,有时会报错(类似下列错误)

More than one file was found with OS independent path ‘META-INF/DEPENDENCIES’

解决方式:
在build.gradle 中 添加下列代码(根据个人情况自行修改):

packagingOptions {  
        exclude 'META-INF/DEPENDENCIES'  
        exclude 'META-INF/LICENSE'  
        exclude 'META-INF/LICENSE.txt'  
        exclude 'META-INF/license.txt'  
        exclude 'META-INF/NOTICE'  
        exclude 'META-INF/NOTICE.txt'  
        exclude 'META-INF/notice.txt'  
        exclude 'META-INF/ASL2.0'  
    }  

2. WebView加载过程中 对于Https 资源的加载问题。 可能会出现 https 相关的图片无法显示、 或者 相关的css 样文件无法显示等

重写webViewClient的以下方法即解决

@Override  
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){  
        handler.proceed();  
}  

3. DexArchiveMergerException: Unable to merge dex
这个错误,困扰了我几个小时,在网上看了好多博客,有删除.gradle 然后 clean的, 也有其他的,但多半不能解决问题。 我这边是通过 检测重复的依赖,或者重复的包 解决的。

检测一下是否导入了重复的依赖 或则 jar包

4.AES 加密中 AES/CBC/NoPadding 情况下, 当不足 16字节 或者 16 * n 个字节的情况下, 会导致加密失败 即 null 。我们可以对不足部分进行 补充, 可以是不可见字符 , 或者… 自己定义吧。当然,解密的过程也会出现不可见字符, 这个自己处理一下便可以了

  /**
     *  使用 noPadding 加密 不足16位部分 使用 0x00 不可见字符填充
     * @param beforeStr
     * @return
     */
    private static String processString(String beforeStr) {
        if (beforeStr == null)return null;
        int length = beforeStr.getBytes().length;
        int otherLength = 16 - length % 16;
        byte[] bytes = beforeStr.getBytes();
        byte[] newBytes = new byte[length + otherLength];
        for (int i = 0; i < newBytes.length; i++) {
            if (i < length){
                newBytes[i] = bytes[i];
            }else {
                newBytes[i] = 0x00;
            }
        }
        return new String(newBytes);
    }

5. 关于Gson解析异常:Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

检测json 字符串,乱码 或者 包含空格、 不可见字符等。都会导致解析失败。

扫描二维码关注公众号,回复: 3633857 查看本文章

6. 遇到 release 版本与 debug 版本表现不一样的情况下, 如果你的项目里面有混淆,八成是混淆代码部分出了问题 。检测表现不同或者是奔溃的地方,找到对于的 类或者 代码 块, 看是否在混淆文件里面进行的处理。(因为半信半疑的想法,在这个不起眼的小问题上面浪费了 数个小时)

7.报错: 无法保存裁剪过的图片
对于调用系统裁剪的代码中由以下这样一行

intent.putExtra(MediaStore.EXTRA_OUTPUT, uri1);

这行代码的意思是将图片保存到 我们所提供的uri1 中。
android4.4以下,可以正常, 4.4以上 当uri 是 应用内目录就会有这样的问题。等于是 一个应用要往另外一个应用保存数据,这显然是不被允许的。
解决方式:
1.删除该行。
2.intent.putExtra(“return-data”, true);
3.在onActivityResult 的回调中

Bitmap bitmap = data.getParcelableExtra("data"); 

来获取图片,然后就可以做我们想做的操作了。

Parcelable 报错

Unmarshalling unknown type code 3670065 at offset 724

出现这样的错误时因为序列化和反序列话的顺序不一致导致的

Gradle 报错 unable to Merge dex

目前预测 两个原因:
1. 添加了重复的依赖 或者 jar 包 会报这个错。
2. 方法数越界 65535问题。 可以在gradle Console 中 run -info 查看详细的报错信息。

WebView 定位问题

需要添加如下代码,即可定位:

//webview定位相关设置
settings.setDomStorageEnabled(true);
settings.setGeolocationEnabled(true); 
//settings.setGeolocationDatabasePath(getFilesDir().getPath());
progressWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) {
    callback.invoke(origin, true, true);
    super.onGeolocationPermissionsShowPrompt(origin, callback);
}
});

猜你喜欢

转载自blog.csdn.net/mike_Cui_LS/article/details/78910533