网友通过本文主要向大家介绍了android开发常见问题,android常见问题,android面试常见问题,android常见面试题,android常见异常等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
Android常见问题集锦
Android常见问题集锦(持续更新)
SVN:Commit failed(details follow):svn: xxx is scheduled for addition, but is missing描述:删除文件夹后点commit提交,但是提示以下错误: “svn: Commit failed (details follow): svn: ‘xxx’ is scheduled for addition, but is missing”。
原因:之前用SVN提交过的文件,被标记为”add”状态,等待被加入到仓库。若此时你把这个文件删除了,SVN提交的时候还是会尝试提交这个文件,虽然它的状态已经是 “missing”了。
解决:在命令行下用 “svn revert xxx –depth infinity”,在图形界面下,右键–Revert,选中那个文件或文件夹。这样就告诉SVN把这个文件退回到之前的状态 “unversioned”,也就是不对这个文件做任何修改。 Java工程中调用Android库出现“Stub!”错误
描述:控制台显示错误:Exception in thread “main” java.lang.RuntimeException: Stub!
原因:在Java工程中尝试使用Android库中的org.json.JSONObject类,在执行时出现“Stub!”错误,Android工程中无法执行java的main函数相似,Android工程和Java工程还有一定的差异,不能混用他们的库,和函数入口方法。
解决:将执行的代码,移植到在Android工程可以正确执行! Javadoc中产生乱码的解决方法
描述:在生成javadoc文档或者在进行打包时出现“编码GBK的不可映射字符”错误。
原因:因为代码中有中文注释的缘故,这个还是比较常见的。
解决:
方式一:通过Android Studio界面操作生成JavaDoc文档,依次打开Tools->Generate JavaDoc->Other command line arguments设置为:“-encoding UTF-8 -charset UTF-8”;
方式二:通过配置module中的build.gradle文件,添加一个如下任务task:tasks.withType(JavaCompile) {
options.encoding = “UTF-8”
},这个构建时不会出现乱码,但是在查看生成的文档时会发现显示会乱码,找到原因是需要设置charset也为UTF-8,至今没找到怎么配置,如果有哪位仁兄知道怎么配置,麻烦评论告知下,万分感谢! Failure [INSTALL_FAILED_OLDER_SDK]
描述:编译的时候,报Failure [INSTALL_FAILED_OLDER_SDK]错误。
原因:一般是系统自动帮你设置了compileSdkVersion,且版本过高导致的错误。
解决:修改build.gradle下的compileSdkVersion xxx为compileSdkVersion 19(或者你本机已有的SDK即可). 虚拟按键影响界面全屏显示
描述:在android4.0及其以上的版本中,出现了一个很屌的东西,叫做Navigation Bar,它和Status Bar一上一下相互交映,影响了我们的全屏。
原因:全屏显示时有时需要隐藏导航栏和虚拟按键,而虚拟按键是会根据你的触摸显示出来的,所以需要添加监听,在出现时直接强制隐藏。
解决:直接在当前Activity中添加如下代码就行:
private static Handler sHandler;
private final Runnable mHideRunnable = new Runnable() {
@Override
public void run() {
int flags;
int curApiVersion = android.os.Build.VERSION.SDK_INT;
if (curApiVersion >= Build.VERSION_CODES.KITKAT) {
flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE;
} else {
flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
getWindow().getDecorView().setSystemUiVisibility(flags);
}
};
@Override
protected void onResume() {
super.onResume();
sHandler = new Handler();
sHandler.post(mHideRunnable); // hide the navigation bar
final View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
sHandler.post(mHideRunnable); // hide the navigation bar
}
});
}
使用shape的同时能通过代码修改shape的颜色属性描述:有时会遇到这种需求:不同状态的背景标识不同,并且背景有特定的shape样式。
原因:一般的shape文件都是在xml中固定好颜色,从而需要在代码中修改shape文件中的颜色值。
解决:直接通过控件获取该控件的背景,通过更改背景颜色从而更改shape文件中的颜色,代码如下所示:
GradientDrawable gradientDrawable = (GradientDrawable)view.getBackground();
gradientDrawable.setColor(color);
Error:Cause: peer not authenticated描述: Android studio 导入项目报 Error:Cause: peer not authenticated 异常
原因:主要是gradle版本对应不上导致的
解决:在project下的build.gradle文件中,将dependencies中的classpath对应的gradle版本改为1.3.0,再将repositories中的jcenter()改为jcenter{url “http://jcenter.bintray.com/“} Popupwindow使用异常:unable to add window–token null is not valid
描述: Popupwindow必须依赖一个view进行弹窗,
void android.widget.PopupWindow.showAtLocation(View parent, int gravity, int x, int y)
调用这个方法就能显示Popupwindow了,但是有时会碰到这样一个异常:unable to add window – token null is not valid;is your activity running?
原因:导致这个的原因一般是Activity的onCreate()函数里面调用了showAtLocation,由于你的popupwindow要依附于一个activity,而activity的onCreate()还没执行完就需要弹窗肯定会出问题的。
解决:在Handler中进行弹窗,在onCreate中通过延时调用就OK了,具体代码如下:
private Handler popupHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
popupWindow.showAtLocation(findViewById(R.id.rlShowImage), Gravity.CENTER|Gravity.CENTER, 0, 0);
popupWindow.update();
break;
}
}
};
popupHandler.sendEmptyMessageDelayed(0, 1000);
ListView点击条目无响应描述:开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。
原因:原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应。
解决:使用descendantFocusability来解决,该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了。 使用shape绘制虚线时,在4.0以上机型上显示实线
描述:在利用shape绘制虚线时,在Graphical Layout中能正常显示,但在Android4.0上的机型显示成了实线。
原因: 4.0以上默认把Activity的硬件加速打开了,所以我们在Manifest.xml中关掉即可。
解决:在需要显示的activity中增加如下属性:android:hardwareAccelerated=”false”,也可以通过从View层级上把硬件加速关掉 view.setLayerType(View.LAYER_TYPE_SOFTWARE, null)。 Application does not specify an API level requirement
描述:编译时报警告:Application does not specify an API level requirement!
原因:在AndroidManifest.xml或者build.gradle文件中没有添加API版本号,不影响运行。
解决:在对应的地方添加上minSdkVersion和targetSd