android问题点

来源:互联网 发布:淘宝卖家钱款在哪看 编辑:程序博客网 时间:2024/06/07 05:33

Error parsing XML: unbound prefix(拼写错误)

在编辑layout文件时遇到这个错误提示,有时我们找了好久都没有发现错误。其实这个错误跟我们的粗心拼写非常有关系。
unbound prefix往往意味着我们的前缀不对,而这个前缀又跟android分不开。
在我们将android拼写成Android、andorid等,错误还真不那么容易发现。技巧就是,看到这个错误,就沿着错误在附近寻找拼写错误。
细心才是解决这个错误的关键。


application中需要添加allowBackup属性

Should explicitly set android:allowBackup to true or false (it’s true by default, and that can have some security implications for the application’s data)

RE:历史原因,在application标签中没有加allowBackup属性。其实默认是允许App做备份的。但我们必须加上这个标签在中。
如下所示:

<application       android:label="@string/app_name"       android:allowBackup="false"      android:icon="@drawable/ic_launcher">  

现在来看,不用把allowBackup放在第一个标签也是可以的。


targetSdkVersion版本号(可以无视的警告)

<uses-sdk      android:minSdkVersion="10"      android:targetSdkVersion="19"      android:maxSdkVersion="19"/>  

警告原文:
Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating
this version. Consult the android.os.Build.VERSION_CODES javadoc for details.

警告的原意是没有指向Android的最新版本。这里说的最新版本是你的开发环境中最新的sdk版本,与你当前项目中引入的
sdk没有关系。这一点令我纠结好一会。我前几天刚刚把Android5.0的SDK下载下来,而我的项目中targetSdkVersion是19.
将其改为21就没有警告了。但我觉得这样没有必要,这是一个可以允许无视的警告。


View requires API level 3 (current min is 1)

我是从其他项目的layout文件中拷过来放到新项目的布局文件中,就报下面的错了。
View requires API level 3 (current min is 1):

我马上去project.properties查看,
target=android-19
这没有问题,而且eclipse中项目列表中也显示着Android 4.2.2.
一定是别的问题,分析应该是我copy的时候连带着把其他一些信息也带过来了,去clear Lint Marker一下就可以了。
项目右键—>Android Tools—>Clear Lint Markers

//2014.12.2
上述的clear只能临时的修复错误。后来我每一次修改HorizontalScrollView相关的代码(java或xml)都会再次报错。
原来我还是忘记在AndroidManifest中对sdk版本做设置了,只要在标签上加上描述就好。

<uses-sdk      android:minSdkVersion="15"      android:targetSdkVersion="21"      android:maxSdkVersion="21"/>

setOnClickListener上的override有错误(java 1.5)

看到button setOnClickListener下override(重写、覆盖)的onClick上面的@Oerride修饰符有错误:
onClick(View) of type new View.OnClickListener(){} must override a superclass method

之前是没有问题的,这就很纳闷了。
但是这个问题以前也遇到过,是Java编译器的问题。Java 1.5中接口的方法是不能用@Oerride修饰符的,1.6以上才可以。那么一定是什么异常情况把Eclipse的配置修改了,
那就再改回来吧。
项目属性(Alt+Enter)—>javaCompilercomplier—>勾选Enable project specific settings 并且将 compliance level从1.5改为1.6


R cannot be resolved to a variable(BuildConfig有问题)

今天遇到的问题,gen下没有自动生成文件,而大部分java文件中错误是找不到R.java.

这就一定有别的原因造成错误,所以才不能成功编译。我查看了所有的xml文件,没有错误。
再回过头来挨个java文件找,看看是否有别的错误。
果然,在某个类中使用了BuildConfig来做调试开关。
private static volatile boolean isDebugEnabled = BuildConfig.DEBUG;

但import BuildConfig类是找不到的。因为这个类是ADT自动为我们生成的,它也在gen目录下。由于程序有错误,
编译失败,gen目录下是不会有任何文件生成的。这就进入鸡生蛋还是蛋生鸡的死循环了。怎么办?

我看了一下别的项目,这个BuildConfig类很简单,自己先写一个,让解决java文件的错误再说。

package com.linc.xxx;  public final class BuildConfig {      public final static boolean DEBUG = true;  }  

果然,java文件错误消失,gen目录下的R.java也生成了,但是在生成BuildConfig.java时报错,说已经存在。我把自己写的类删除,再clean一下。问题就解决了。但是一般情况下,用自己自定义的类来判断更好一点。


An error occurred while automatically activating bundle com.android.ide.eclipse.adt

这是Eclipse的问题,重启之后问题依旧。
在坛子里找到这个办法,果然好用。
命令行到eclipse路径运行:eclipse.exe -clean


No resource found that matches the given name

在相对布局中,若是用到android:layout_above属性,并且其后id之前没有出现过,那么需要这样写:android:layout_above=”@+id/vidAdd_ButtonGroup”,多加一个“+”。
否则就会报上述的错误。


Activity has leaked window that was originally added

今天调试程序时log中突然打印这样的错误,但是程序并没有crash,为了不放过一个错误,我决定调查一下。
当时是离开一个activity,然后提示是否退出此界面,接下来就打印此错误:

03-08 18:02:48.521: E/WindowManager(6340): Activity com.linc.megatron.activity.ExamActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40568ea8 that was originally added here  03-08 18:02:48.521: E/WindowManager(6340): android.view.WindowLeaked: Activity com.linc.megatron.activity.ExamActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40568ea8 that was originally added here  03-08 18:02:48.521: E/WindowManager(6340):  at android.view.ViewRoot.<init>(ViewRoot.java:264)  03-08 18:02:48.521: E/WindowManager(6340):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)  03-08 18:02:48.521: E/WindowManager(6340):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)  03-08 18:02:48.521: E/WindowManager(6340):  at android.view.Window$LocalWindowManager.addView(Window.java:424)  03-08 18:02:48.521: E/WindowManager(6340):  at android.app.Dialog.show(Dialog.java:241)  03-08 18:02:48.521: E/WindowManager(6340):  at com.linc.megatron.base.BackKeyActivity.showDialog(BackKeyActivity.java:76)  03-08 18:02:48.521: E/WindowManager(6340):  at com.linc.megatron.base.BackKeyActivity.onKeyDown(BackKeyActivity.java:62)  03-08 18:02:48.521: E/WindowManager(6340):  at android.view.KeyEvent.dispatch(KeyEvent.java:1256)  03-08 18:02:48.521: E/WindowManager(6340):  at android.app.Activity.dispatchKeyEvent(Activity.java:2078)  03-08 18:02:48.521: E/WindowManager(6340):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1709)  03-08 18:02:48.521: E/WindowManager(6340):  at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2628)  03-08 18:02:48.521: E/WindowManager(6340):  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2603)  03-08 18:02:48.521: E/WindowManager(6340):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1875)  03-08 18:02:48.521: E/WindowManager(6340):  at android.os.Handler.dispatchMessage(Handler.java:99)  03-08 18:02:48.521: E/WindowManager(6340):  at android.os.Looper.loop(Looper.java:123)  03-08 18:02:48.521: E/WindowManager(6340):  at android.app.ActivityThread.main(ActivityThread.java:3687)  03-08 18:02:48.521: E/WindowManager(6340):  at java.lang.reflect.Method.invokeNative(Native Method)  03-08 18:02:48.521: E/WindowManager(6340):  at java.lang.reflect.Method.invoke(Method.java:507)  03-08 18:02:48.521: E/WindowManager(6340):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)  03-08 18:02:48.521: E/WindowManager(6340):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)  03-08 18:02:48.521: E/WindowManager(6340):  at dalvik.system.NativeStart.main(Native Method)  

显然,我用Dialog确认是否退出,但是activity销毁后并没有处理Dialog的退出。
解决办法:
知道了问题所在就容易解决问题了。只需要在activity销毁时关闭Dialog就好。

@Override  protected void onDestroy() {      if(mDialog != null) {          mDialog.dismiss();      }      super.onDestroy();  }   

红色感叹号与No projects are found to import

1.先说No projects are found to import
导入工程时报此错误,问题的原因是.project和.classpath丢失。
通常可以新建一个项目,然后用自己的文件直接拷贝到该项目中,替换原有文件。
然而我们还可以修改那两个隐藏文件,其实.classpath是不用修改的,它的内容是:

<?xml version="1.0" encoding="UTF-8"?>  <classpath>          <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>          <classpathentry kind="src" path="src"/>          <classpathentry kind="src" path="gen"/>          <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>          <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>          <classpathentry kind="output" path="bin/classes"/>  </classpath>  

而.project只需要修改项目名称,如下:

<?xml version="1.0" encoding="UTF-8"?>  <projectDescription>          <name>MyProject</name>          <comment></comment>          <projects>          </projects>          <buildSpec>                  <buildCommand>                          <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>                          <arguments>                          </arguments>                  </buildCommand>                  <buildCommand>                          <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>                          <arguments>                          </arguments>                  </buildCommand>                  <buildCommand>                          <name>org.eclipse.jdt.core.javabuilder</name>                          <arguments>                          </arguments>                  </buildCommand>                  <buildCommand>                          <name>com.android.ide.eclipse.adt.ApkBuilder</name>                          <arguments>                          </arguments>                  </buildCommand>          </buildSpec>          <natures>                  <nature>com.android.ide.eclipse.adt.AndroidNature</nature>                  <nature>org.eclipse.jdt.core.javanature</nature>          </natures>  </projectDescription> 

2.按照上面的修改,把项目引入进来,但是项目图标左边有个红色感叹号。
这可能是build path出现错误了。像我这次的,项目属性(alt+enter),在java build path中的libraries中引入了不存在的jar,将其移除就好了。


Missing contentDescription attribute on image

Image相关控件如ImageView和ImageButton都会出现这个警告,对,这只是一个警告。
原因是没有设置contentDescription(为一些没有文字描述的view加上描述)。
具体的好处我还没有完全明晰,希望用过之后会总结一下。
在加上这个属性还有助于代码风格的优雅,比如官方提示的:

android:contentDescription="@string/desc" 

Eclipse 中文乱码之解决

需要说明下,我的系统是Fedora14.
我在Windows下的Android项目移到Fedora下,
中文出现乱码情况,从网上找到了答案,如下:
windows–>preferences–>General–>Workspace–>选择Text file encoding中的Other,选择GBK,如果没有直接输入GBK,点击“Apply”
效果是很明显的,改完后中文就显示出来了。
如果还不行,网上还有下一步,
windows–>preferences–>General–>Content Types–>点击右边窗口中的Text,选择Java Source File,在Default encoding【在窗口最下边,如果看不到,拖动滑块下拉即可看到】中输入GBK,点击OK。


0 0
原创粉丝点击