本文是个人平时项目开发过程遇到的一些问题,记录下来并总结解决方案,希望能帮到大家解决问题,有些问题的解决方案是通过Google找到的,建议大家遇到问题多去上面找,基本上都能找到解决方案的。
1
将Eclipse项目导入到Android studio 中 很多点9图出现问题解决方法
在build.gradle里添加以下两句:
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
用来关闭Android Studio的PNG合法性检查的,直接不让它检查。
****2
Android Studio 错误: 非法字符: ‘\ufeff’ 解决方案|错误: 需要class, interface或enum****
原因:
Eclipse可以智能的把UTF-8+BOM文件转为普通的UTF-8文件,Android Studio还没有这个功能,所以使用Android Studio编译UTF-8+BOM编码的文件时会出现” 非法字符: ‘\ufeff’ “之类的错误
解决方法:
手动将UTF-8+BOM编码的文件转为普通的UTF-8文件。 用EdItPlus打开.java文件依次:文档》文本编辑》转换文本编码》选择UTF-8编码即可
3
将项目导入到AS中出现以下问题
Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.bui
解决方法:
在build.grade中添加以下代码:
android{
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}
}
4
未知错误(知道的可以在底部留言哦)
error:Timeout to lock cp_proj class cache for build file".../build.gradle"...
It is currently in use by another Gradle instance...
解决方案
以上是错误提示。
解决的思路很简单只需要把cache.properties.lock文件删除了就可以了。当时我们删除的时候会被占用这时候需要进入任务管理器结束关于java的进程就行比如 java 的jdk 删除后重启让java jdk启动 启动Android Studio就能启动APK了。
5
修改了Android项目的最小SDK版本之后出现很多stysle文件找不到
解决方案
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "net.mmloo2014.android"
minSdkVersion 14
targetSdkVersion 23
}
compileSdkVersion 是多少版本的,那么compile ‘com.android.support:appcompat-v7:23.2.1’ 就是啥版本的。
6
Android studio 编译问题:finished with non-zero exit value 2
问题:
解决方案
这个错误在app的build.gradle里面添加下面这句就好了。
android {
defaultConfig { multiDexEnabled true
}
}
7
Android studio 编译问题:finished with non-zero exit value 1(由于导入的依赖出现重复造成的)
问题:
解决方案
这个是因为依赖包重复了 (像v4和nineoldandroids),app中实现了对easeUI的依赖,但是app和easeUI都添加了对这个包的依赖。所以就报这个错误,修改之后再报,就clean,rebuild一下。
8
问题,报错信息
解决方案
这个是在我们启动的时候报错的,而不是在编译的时候,原因是这样的,报这个错是因为有2个库中存在相同的类。大家可以看到stackoverflow上有人也提了这样的问题。只需要删除其中的一个就可以解决了。
9
添加第三方依赖出现的问题
错误原因
出现这个错误的原因是我引入的第三方库最低支持版本高于我的项目的最低支持版本,异常中的信息显示:我的项目的最低支持版本为14,而第三方库的最低支持版本为19,所以抛出了这个异常。
解决方案
在AndroidManifest.xml文件中标签中添加
<uses-sdk tools:overrideLibrary="xxx.xxx.xxx"/>
其中的xxx.xxx.xxx为第三方库包名,如果存在多个库有此异常,则用逗号分割它们,例如:
<uses-sdk tools:overrideLibrary="xxx.xxx.aaa, xxx.xxx.bbb"/>
这样做是为了项目中的AndroidManifest.xml和第三方库的AndroidManifest.xml合并时可以忽略最低版本限制。
10
Android studio 编译问题:finished with non-zero exit value 1(由于buildtools版本太高造成的)
错误
错误原因
buildToolsVersion版本太高,我原来的 buildToolsVersion “24.0.0” 需要jdk1.8,而我的是jdk1.7,所以一直报这个错,刚开始以为是v4包和V7包冲突,因为之前遇到这样的问题,而这次删除V4包之后依然报这个错,上stackoverflow搜了一下,把buildTools版本降下来就好了。
解决方案
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
}
11
Android studio 编译问题:Gradle DSL not found ‘android()
问题
解决方案
配置build.gradle:
配置app/build.gradle:
最后再同步一下sync即可。
12
Android studio 编译问题:Gradle DSL not found ‘android()
问题描述
Error:(51, 52) 错误: -source 1.6 中不支持 diamond 运算符
(请使用 -source 7 或更高版本以启用 diamond 运算符)
解决方案:
方案一
方案二
在build gradle中进行配置如下代码:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
最后同步一下即可
13
Glide使用问题:使用Glide加载圆角图片,第一次显示占位图
问题描述
最近在项目中使用Glide加载圆形图片,并且设置placehloder和error两个占位图,运行发现,第一次加载图片只显示占位图,需要第二次进入的时候才会正常显示。
如果你刚好使用了这个圆形Imageview库或者其他的一些自定义的圆形Imageview,而你又刚好设置了占位的话,那么,你就会遇到第一个问题。如何解决呢?
方案一
不设置占位图
方案二
使用Glide的Transformation API自定义圆形Bitmap的转换
使用方法:
方案三
重写Glide的图片加载监听方法,具体如下:
注意事项:
该方法在listview上复用有问题的bug,如果在listview中加载CircleImageView,请不要使用该方法。
方案四:不使用Glide的默认动画:
14
json数据解析问题:json串头部出现字符:”\ufeff” 解决方法
异常信息
org.json.JSONexception : Value of type java.lang.String cannot be converted to JsonObject.
解析服务器返回 的json格式数据时,我们可能会发现,数据格式上是没有问题的,但是仔细对比会发现,在json串头部发现字符:”\ufeff”
客户端解决方案:
服务器端解决方案:
将输出此json的php源码重新用editplus之类用utf-8无BOM的编码保存。不要用windows系统自带的记事本编辑php源码,这个BOM就是记事本这些windows自带的编辑器引入的。
15
Android studio编译问题:not found ndk()
问题
Error:(15, 0) Gradle DSL method not found: 'ndk()' method-not-found-ndk
解决方案
出现该问题,可能是由于ndk配置在build.gradle配置文件中位置弄错导致的
16
开源控件Scrollablelayout和pullToRefreshListView嵌套滑动不流畅
问题
A Activity中外层为ScrollableLayout ,中间有一viewpager,viewpager为包含了pullToRefreshListView的fragment,listview上滑流畅,下拉卡顿。
解决办法:
Fragment实现ScrollableHelper.ScrollableContainer接口,在getScrollView()方法中返回mListView.getRefreshableView();
Activity 中ScrollableLayout.getHelper().setCurrentScrollableContainer(fragment);
原因(猜测):PullToRefreshListView 实际为linerLayoutListView模拟实现ListView效果,因此需返回一个可以滑动的view
17
WebView 问题
拦截url:重写WebClient的方法shouldOverrideUrlLoading();返回true即表示拦截掉url的加载.
拦截alert弹窗,重写WebChromeClient的onJsAlert();方法,返回true即表示拦截,不再弹出,但返回之前需调用result.confim();不然onJsAlert()只会调用一次,web触摸无反应
18
软键盘
某些时候软键盘弹出会把tittle栏一并顶上去,而我们并不需要这种结果,想把tittle栏保留在原位,可在
onCreate()方法里加上
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
super.onCreate(savedInstanceState);
}
即可
一共四种模式:
SOFT_INPUT_ADJUST_NOTHING // 不挤压窗口
SOFT_INPUT_ADJUST_PAN
SOFT_INPUT_ADJUST_RESIZE //挤压窗口
SOFT_INPUT_ADJUST_UNSPECIFIED
可参考
[http://unicorn25.iteye.com/blog/916504](http://unicorn25.iteye.com/blog/916504)
监听软键盘
1.首先我们需要将监听所在的Activity在Manifest文件中的加入
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
2.为Activity的最外面的Layout设置一个OnLayoutChangeListener监听器:
activityRootView.addOnLayoutChangeListener(new OnLayoutChangeListener({
@Override
public void onLayoutChange(View v, int left, int top, int right,
int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
//old是改变前的左上右下坐标点值,没有old的是改变后的左上右下坐标点值
if (bottom > oldBottom){
//输入法软键盘关闭
Log.d(">>>>>>>>>crg", "输入法软键盘关闭: ");
} else if (bottom < oldBottom){
//输入法软键盘打开
Log.d(">>>>>>>>>crg", "输入法软键盘打开: ");
}
}
}));
17
pullToRefreshGridView去掉点击色
android:listSelector="@null"