小生不才,目前入坑程序员三年多,最近才开始写自己的技术博客,这一篇记录了一些Bug的解决方案,都是参考了一些大牛的博客,亲自测试然后自己做笔记的记录.只写上了解决办法,有一些原理性的分析没加上,请各位看官见谅.如有不妥之处,请留言指出相互探讨.
webView加载H5地址,返回上一级h5是,报错:err_cache_miss
解决办法:加上下面的代码
if (Build.VERSION.SDK_INT >= 19) {
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
使用webView加载H5,遇到报错:xx地址找不到 error_log:ERR_UNKNOWN_URL_SCHEME
原因:是因为webView.loadUrl()里面的url跳转只支持http或者https开头的地址,其他weixin,alipay或者market等开头的地址跳转不来就会报上面的错误.
解决方案:
web_view.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try {
if (!url.startsWith("http") && !url.startsWith("https"))
//其他自定义的scheme
{
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
} catch (Exception e) {
//防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
return false;
}
view.loadUrl(url);
return true;
}
EvenBus依赖后报错:
Error:No option eventBusIndex passed to annotation processor
Error:Execution failed for task ‘:app:compileDebugJavaWithJavac’.
Compilation failed; see the compiler error output for details…
解决方案:
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [ eventBusIndex : 'com.example.myapp.MyEventBusIndex' ]
}
}
}
}
dependencies {
implementation 'org.greenrobot:eventbus:3.1.1'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'
}
dex引用超过64k的解决办法:
defaultConfig {
//越过dex的方法引用64k限制--api>21时只需要加下面这句代码
multiDexEnabled true
}
dependencies {
//越过dex的方法引用64k限制--api<21时需要加这个依赖
implementation 'com.android.support:multidex:1.0.3'
}
问题:华为高版本(8.0以上)手机,使用测试地址时,报错日志内容有:不能明文传递,或者位置服务异常,或者证书问题.
解决办法:在res包下见一个xml包,新建一个文件(network_security_config),然后在manifest.xml文件里面的<application标签下添加:android:networkSecurityConfig="@xml/network_security_config"
nertwork_security_config的代码:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
AndroidStudio报错:Could not download groovy-all.jar
解决方法: ①:在APP的build.gradle下添加:
lintOptions {
checkReleaseBuilds false
abortOnError false
}
②:在项目的build.gradle里面添加下面的代理.(因为既然是下载问题,可能涉及到翻墙等问题)
repositories {
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
}
allprojects {
repositories {
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
}
}
#error: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first.(ViewPager适配器中instantiateItem方法)
解决方法:
1.去除R.layout.viewpager的XML文件中GridView的外部的LinearLayout布局控件,这样GridView就不存在父容器控件。
2.在在PagerAdapter中通过instantiateItem方法中动态添加视图前做一个简单的判断,判断待添加的视图是否已存在父控件,若存在则调用removeAllViews()去除之。
ViewGroup parent = (ViewGroup) mImages.get(position).getParent();
//(mImages是ImageView的集合)
if (parent != null) {
parent.removeAllViews();
}
RecycleView嵌套RecycleView时需要测量条目的高度和宽度
mLayout.setMeasuredDimensionFromChildren(widthSpec, heightSpec)这行代码的作用就是根据子控件的大小,设置RecyclerView的大小
FaceBook集成三方登录时,生成发布散列秘钥的dos命令:
示例:keytool -exportcert -alias aaa -keystore “bbb\ccc.jks” | “ddd” sha1 -binary | “ddd” base64
aaa:签名证书的alias名称
bbb:签名证书的地址
ccc:签名文件的名字
ddd:openssl.exe的地址
FaceBook登录页下面的隐私政策中的AppName是配置在manifest.xml中
<meta-data
android:name="com.facebook.accountkit.ApplicationName"
android:value="@string/app_name"
/>
```