Android开发笔记(各错误或知识点汇总)(转)

时间:2022-12-28 18:08:14

1.控制台输出:called unimplemented OpenGL ES API

调用了未实现的OpenGL ES API函数,一般由于导入的第三方库如地图库,里面有用到OpenGL,但是模拟器的硬件默认是没有这个的,所以需要我们编辑模拟器Emulation Options选项勾选 Use Host GPU 然后重启模拟器再尝试,如果还是这个错误,那么我们只好用真机测试了。


2.控制台输出:

Android开发笔记(各错误或知识点汇总)(转)

这个错误是由于真机里已经存在一个相同签名的应用程序,最简单是真机先卸载掉,然后再run。


3.高德地图android版本,导入地图库,项目打开后报错:

06-05 09:10:46.718: W/dalvikvm(932): Unable to resolve superclass of Lcom/amapv2/cn/apis/BasicMapActivity; (29)
06-05 09:10:46.718: W/dalvikvm(932): Link of class 'Lcom/amapv2/cn/apis/BasicMapActivity;' failed

06-05 09:10:46.888: E/AndroidRuntime(932): FATAL EXCEPTION: main
06-05 09:10:46.888: E/AndroidRuntime(932): java.lang.ExceptionInInitializerError
06-05 09:10:46.888: E/AndroidRuntime(932):         at java.lang.Class.newInstanceImpl(Native Method)
06-05 09:10:46.888: E/AndroidRuntime(932):         at java.lang.Class.newInstance(Class.java:1319)
06-05 09:10:46.888: E/AndroidRuntime(932):         at android.app.Instrumentation.newActivity(Instrumentation.java:1054)


这个错误是由于你的android开发环境adt升级到最新版本导致的错误,属于你Android开发环境问题,选中你的项目,右击选择“Properties”---------》“Java Build  Path”--------》“Order  and  Export” ,把“Android  Private Libraries”选项打上勾,再次编译就可以了。


4.android横竖屏锁定:

xml文件中设置:
  要实现这个目的,只需要在AndroidManifest.xml里声明Activity的时候加上一个属性:android:screenOrientation,属性取值landscape为固定横屏、portrait为固定纵屏幕。
  代码:
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE););//强制为横屏
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏
  ============延伸========
  屏幕会自动切换时,默认状态的应用程序,会重新调用onCreate,相当于重新启动了一次应用程序。同时,layout可能因为横屏带来不能合理适配的问题。为了解决旋屏和键盘切换引起的程序重启问题,还需要增加一个属性:android:configChanges。这个属性可以理解为一个监听器,它将拦截旋屏和键盘切换事件,阻止程序重启而变为回调onConfigurationChanged方法。这里常用的属性取值为:keyboardHidden|orientation。


5,Socket TCP/UDP通信原理

http://wenku.baidu.com/view/47437d4dcf84b9d528ea7a67.html

loading


6,android 谷歌地图开发时,控制台输出:

Android开发笔记(各错误或知识点汇总)(转)

Android开发笔记(各错误或知识点汇总)(转)

也就是调试时真机运行后地图显示空白。造成这种现状的原因是由于 google api key配置错误。

Api key分为两种情况

一种是使用debug keystore生成的api key

一种是使用release keystore生成的api key

不同的api key使用不同的sha1字符生成 ,所以如果是调试,如果使用android自带的debug keystore,一定要是当时生成debug api key的那个 keystone。如果是release,自己的keystore来签名,APP配置文件就用 release下生成的api key。不能混用。否则显示不了地图。

解决办法:

1,把debug keystone替换成生成 api key 的那个:

Android开发笔记(各错误或知识点汇总)(转),

2,APP配置文件里要启用debug 的 key:

Android开发笔记(各错误或知识点汇总)(转)


6,Android Your content must have a ListView whose id attribute is 'android.R.id.list'错误

错误提示:Your content must have a ListView whose id attribute is 'android.R.id.list'

对于以上错误,其实可能是因为我们要实现对ListView中setOnItemClick的事件监听而去继承了LiseActivity,但是却没有ListView的标签,网上有说过只要在布局文件中添加如下代码即可:

[java] view plaincopy
  1. <ListView     
  2. android:id="@android:id/list" 或android:id="@id/android:list"    
  3. android:layout_width="fill_parent"    
  4. android:layout_height="wrap_content">    
  5. </ListView>    

7,view的onFinishInflate()何时调用的?

比如:自定义一个view叫myView ,路径是,com.test.view.MyView,此view是继承LinearLayout,定义的布局文件是my_view.xml
里面内容是:
<com.test.view.MyView>
        <xxxx />
</com.test.view.MyView>

当在使用的时候,可以这样使用
MyView mv = (MyView)View.inflate (context,R.layout.my_view,null);
当加载完成xml后,就会执行那个方法。

8,onInterceptTouchEvent与onTouchEvent 执行顺序

ViewGroup里的onInterceptTouchEvent默认值是false这样才能把事件传给View里的onTouchEvent.


ViewGroup里的onTouchEvent默认值是false。


View里的onTouchEvent返回默认值是true.这样才能执行多次touch事件

http://blog.csdn.net/android_tutor/article/details/7193090


9,Jar mismatch! Fix your dependencies

Android开发笔记(各错误或知识点汇总)(转)

这个问题是我们添加了多个开源应用例如ABS 或者 PageIndicator 由于他们都包含 support V4.jar, 或者你的工程目录里 libs 中包含这个包,所以冲突发生了,他们各自的签名SHA 不一致,解决方案:

去掉某一个libs里面的supportv4.jar,直接在引用  external jar using build path menu > add external jar,在目录外选一个(supportV4.jar)即可。


10,明明卸载掉了豌豆荚,可是.apk文件还是显示 wandoujia.file,如何去除?

开始=运行=输入CMD回车 输入assoc .apk=null (记得assoc后面有个空格和点) 回车即可。

Android开发笔记(各错误或知识点汇总)(转)Android开发笔记(各错误或知识点汇总)(转)


11,gen already exists but is not a source folder. Convert to a source folder or rename it.

Android开发笔记(各错误或知识点汇总)(转)

Android开发笔记(各错误或知识点汇总)(转)

解决办法:

Android开发笔记(各错误或知识点汇总)(转)

Android开发笔记(各错误或知识点汇总)(转)

   1. Right click on the project and go to "Properties" //鼠标右键点击项目,然后选中Properties
   2. Select "Java Build Path" on the left //选择java Build Path
   3. Open "Source" tab // 打开源文件的tab栏
   4. Click "Add Folder..." //点击添加文件夹
   5. Check "gen" folder and click Ok and Ok again //选中gen目录 然后点确定  应该就可以了【保证source下是gen和src,缺少哪个就添加哪个,缺一不可多余的全部删除】

Android开发笔记(各错误或知识点汇总)(转)    6. Again right click on the project and in the "Andriod Tools" click on "Fix Project Properties"  //右键点击项目 选择     Andriod Tools 点击 Fix Project Properties

按照以上做法,虽然library项目不报错了,可是在其它的项目中引用不到library的类,并且library项目本身都无法引用到,如下:

Android开发笔记(各错误或知识点汇总)(转)


Android开发笔记(各错误或知识点汇总)(转)

解决办法:

右键项目,build path ----->config build path 在SourceTab栏,addFolder:这一回添加src

Android开发笔记(各错误或知识点汇总)(转)

在看看项目组织:

Android开发笔记(各错误或知识点汇总)(转)

没问题了吧。


12,获取当前设备屏幕宽度和高度

[java] view plaincopy
  1. Display display = getWindowManager().getDefaultDisplay();  
  2. display.getWidth();  
[java] view plaincopy
  1. <span style="white-space:pre">      </span>display.getHeight();  

13,项目工程下的lint.xml什么作用?

Android开发笔记(各错误或知识点汇总)(转)Android开发笔记(各错误或知识点汇总)(转)

代码性能改进工具,Lint会自动扫描现有工程的Java和xml文件,给出性能优化改进建议,最终将会在Android的工程目录下生成lint.xml文件。简单点说就是检查项目里不推荐的代码文件。


14,无论真机还是模拟器运行项目,总是闪退,后台报错Class找不到:

Android开发笔记(各错误或知识点汇总)(转)


解决:找半天,clean好多次,都解决不了,一开始以为少了相关的库文件或路径不对,后来才发现,只要把R文件里的所有包下的文件全部remove掉,让系统自动重新生成,就可以拉。

Android开发笔记(各错误或知识点汇总)(转)


15,ClassNotFoundException: Didn't find class "org.osmdroid.views.MapView" on path: /data/app/net.yu-2.apk

Android开发笔记(各错误或知识点汇总)(转)

这个错误是指apk打包时发现:org.osmdroid.views.MapView找不到,但是我们在代码里,引用此路径,就能找到MapView,后来终于想到:

Android开发笔记(各错误或知识点汇总)(转)这个jar包在Android private Libraries里

build config里应该勾选这个,否则打包时不会添加android Private Libraries里的库

Android开发笔记(各错误或知识点汇总)(转)


16,基于XMPP的android连接openfile服务时出错:SASL authentication DIGEST-MD5 failed 

Android开发笔记(各错误或知识点汇总)(转)

Android开发笔记(各错误或知识点汇总)(转)


出现这个问题是由于客户端连接openfile时SASL验证出错,网上找了些相关资料,说是关闭相关鉴权验证就可以了:

[java] view plaincopy
  1. config.setTLSEnabled(false);  
  2. config.setCompressionEnabled(false);  
  3. config.setSelfSignedCertificateEnabled(false);  
  4. config.setSASLAuthenticationEnabled(false);  
  5. config.setVerifyChainEnabled(false);  
可是设置后,还会出现这些错误,终于找到原因,是因为连接服务器时,username和password出错了,看log日志发现我的password传递的为null,所以造成了SASL验证出错。确保你的username和password都有正确的值(和服务器的key对应)就可以了。

Android开发笔记(各错误或知识点汇总)(转)

参考文章:

http://blog.sina.com.cn/s/blog_7e3fa7ec0101894b.html 基于XMPP协议的Android IM研究 

http://blog.csdn.net/onelight1997/article/details/6301289 gloox 链接openfire服务器问题解决办法

http://www.oschina.net/question/872914_80498



17,使用HttpClient时:Target host must not be null, or set in parameters

出现这个问题,原因是url,连接地址不完整, 必须加上"http://"

[java] view plaincopy
  1. HttpPost post = new HttpPost("http://gps.google.com/geo");  


18,真机调试时错误:INSTALL_FAILED_INSUFFICIENT_STORAGE

出现这个问题,原因是设备(真机或模拟器)的内容空间不足,APP无法安装,如过用的手机,删除一些没用的软件腾出一些空间来,如用的是模拟器,设置device的内存更大一些。


19,如何把工程项目下的文件归档?(use as Source Folder)

Android开发笔记(各错误或知识点汇总)(转)

(我们有时候看项目下会有上图中的文件夹打开后都是一层包一层(树状)的并不像com.ka.tradk这样,原因在于当前的包不是Source Folder)

添加完后感觉特别混乱,还是有错误,就看本文第11个截图的解决办法,右键点击工程,选择 "Properties",选择左边的 "Java Build Path",打开 "Source" 标签面板,点击 "Add Folder...",删除没用的,勾选 "gen和src" 文件夹,点击OK,点击YES,再点击OK。


20,在java中,如何四舍五入保留小数点x位?

方法一:

[java] view plaincopy
  1. float temp = 0.6922224f;  
  2. BigDecimal bd = new BigDecimal(temp);  
  3. bd =bd.round(new MathContext(2));  
结果:

System.out.println("bd:"+bd);               bd =  0.69 

显然MathContext中的参数就是保留几位小数点,这种方法返回的是对应类型(float)的结果,如上bd

方法二:

[java] view plaincopy
  1. String parten = "#.#";  
  2. DecimalFormat decimal = new DecimalFormat(parten);  
  3. String str= decimal.format(temp);  
  4. interval = Float.valueOf(str);  

结果:

System.out.println(interval);    interval = 0.7

显然这种方法关键的就是parten参数, #.##就是保留两位小数点并且四舍五入,这种方法返回的是字符串类型。


21,使用eclipse打包时:Export aborted because fatal lint errors were found

Android开发笔记(各错误或知识点汇总)(转)

解决办法:

1,点中项目右键  Properties

2,左边Android列表打开 Android Lint Preference,如下图:

Android开发笔记(各错误或知识点汇总)(转)

3,在上图右上角,点击文字超链接,Configure workspace settings,如下图:

Android开发笔记(各错误或知识点汇总)(转)

4,将"Run full error check when exporting app and abort if fatal errors are found "前的勾去掉,点击Apply再点击OK,全部保存。

5,再次选中项目,鼠标右键,AndroidTools-> Clean Lint Markers。稍等片刻,等待APP清除并重新生成Lint.xml文件。

这个时候再打包,就不会再有错误了。


22,listview如何自定义或不显示分割线?

1,ListView中每个Item项之间都有分割线,设置android:footerDividersEnabled表示是否显示分割线,此属性默认为true。

[html] view plaincopy
  1. <ListView  
  2.     android:id="@+id/local_groups_list"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="wrap_content"  
  5.     android:footerDividersEnabled="false" />  
或是在代码中mListView.setFooterDividersEnabled(false);

2,改变ListView的分割线颜色和宽度,需要在布局中定义android:divider和android:dividerHeight属性。

[html] view plaincopy
  1. <ListView  
  2.     android:id="@+id/local_groups_list"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="wrap_content"  
  5.     android:divider="@color/divider_color"  
  6.     android:dividerHeight="1px" />  
setDivider方法就可以设置自己想要的分割线样式,可以是color也可以是Drawable

3,也可以设置listview不显示分割线,然后给每一个listview item 的底部添加一个imageview,来充作分割线,这也是一种方法。


23,android:inputType="numberSigned"和代码EditText中setInputType以及setRawInputType区别

android中inputType属性在EditText输入值时启动的虚拟键盘的风格有着重要作用。这也大大的方便的操作。有时需要虚拟键盘只为字符或只为数字。所以inputType尤为重要。

    android:inputType="none"
    android:inputType="text"
    android:inputType="textCapCharacters"
    android:inputType="textCapWords"
    android:inputType="textCapSentences"
    android:inputType="textAutoCorrect"
    android:inputType="textAutoComplete"
    android:inputType="textMultiLine"
    android:inputType="textImeMultiLine"
    android:inputType="textNoSuggestions"
    android:inputType="textUri"
    android:inputType="textEmailAddress"
    android:inputType="textEmailSubject"
    android:inputType="textShortMessage"
    android:inputType="textLongMessage"
    android:inputType="textPersonName"
    android:inputType="textPostalAddress"
    android:inputType="textPassword"
    android:inputType="textVisiblePassword"
    android:inputType="textWebEditText"
    android:inputType="textFilter"
    android:inputType="textPhonetic"
//数值类型
    android:inputType="number"
    android:inputType="numberSigned"
    android:inputType="numberDecimal"
    android:inputType="phone"//拨号键盘
    android:inputType="datetime"
    android:inputType="date"//日期键盘
    android:inputType="time"//时间键盘Android开发笔记(各错误或知识点汇总)(转)

在代码中设置的方法:setInputType和setRawInputType的区别,前者是以TEXT类型的键盘,后者是单独Number类型的键盘:

Android开发笔记(各错误或知识点汇总)(转) Android开发笔记(各错误或知识点汇总)(转) Android开发笔记(各错误或知识点汇总)(转)Android开发笔记(各错误或知识点汇总)(转)
fuelcity和fuelhighway都是EditText [java] view plaincopy
  1. fuelCity.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL);  
  2. fuelHighway.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL);  

[java] view plaincopy
  1. fuelCity.setRawInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_SIGNED);  
  2. hway.setRawInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_SIGNED);  

注意,参数必须要有InputType.TYPE_CLASS_NUMBER,否则会显示全键盘。

24,从SD卡获取一个png,然后转化为Bitmap或是Imageview

[java] view plaincopy
  1. String path = Environment.getExternalStorageDirectory().toString()  
  2.         + "/test.png";  
  3. Bitmap mSharedPic = BitmapFactory.decodeFile(path);  
转化为Imageview

[java] view plaincopy
  1. ImageView iv = (ImageView) findViewById(R.id.image_test);   
[java] view plaincopy
  1. iv.setImageBitmap(<span style="font-family:Helvetica,Tahoma,Arial,sans-serif">mSharedPic </span><span style="font-family:Helvetica,Tahoma,Arial,sans-serif">);</span>  

25 Android string.xml通配符(%$)和转义字符的用法


StringFormat通配符 

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

在这个例子中,这个格式化的字符串有2个参数

属性值举例说明
%n$ms:代表输出的是字符串,n代表是第几个参数,设置m的值可以在输出之前放置空格 
%n$md:代表输出的是整数,n代表是第几个参数,设置m的值可以在输出之前放置空格,也可以设为0m,在输出之前放置m个0 
%n$mf:代表输出的是浮点数,n代表是第几个参数,设置m的值可以控制小数位数,如m=2.2时,输出格式为00.00


在程序中按照下面的方法来根据参数来格式化字符串:

Resources res = getResources();

String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

[html] view plaincopy
  1. <string name="info_address">Address: %1$s(%2$s %3$.3f°,%4$s %5$.3f°,Altitude %6$md)</string>  
  2. <string name="info_address_english">Address: %1$s(%2$s %3$.3f°,%4$s %5$.3f°,Altitude %6$.1ft)</string>  
  3. <string name="info_address_a">Approximate address: %1$s(%2$s %3$.3f°,%4$s %5$.3f°,Altitude %6$.1fm)</string>  
  4. <string name="info_address_ab">Approximate address: %1$s(%2$s %3$.3f°,%4$s %5$.3f°,Altitude %6$.1ft)</string>  



XML转义字符 
以下为XML标志符的数字和字符串转义符 
"     (&#34; 或 &quot;) 
'     (&#39; 或 &apos;) 
&     (&#38; 或 &amp;) 
lt(<) (&#60; 或 &lt;) 
gt(>) (&#62; 或 &gt;) 


比如:在string.xml中定义如下一个字符串, 
<string name="first">大家好,欢迎来到mryang社区。welcome to here!</string> 
我想以 
大家好,欢迎来到eoeandroid社区。 
welcome to here! 
两行的形式输出,如何做?加\n,看下面:
 
<string name="hello">大家好,欢迎来到mryang社区。\nwelcome to here!</string> 

android中的空格编码 string.xml前后加空格的技巧 
<string name="space">&#160;&#160;&#160;&#160;我来看空格</string> 
&#160; 这个就代表着空格
 

1. 遇到如下错误的时候说明你需要在单引号签名加转义字符(\): 
Description Resource Path Location Type error: Apostrophe not preceded by \ (in Search' Titles) strings.xml 
只要将定义的字符串中的单引号('), 修改为(\')即可
 

2. 变量文本格式(%s)提示: 
Multiple annotations found at this line: 
- error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" 
attribute? 
- error: Unexpected end tag string 

这是由于新的SDK采用了新版本的aapt(Android项目编译器), 这个版本的aapt编译起来会比老版本更加的严格, 在Android最新的开发文档中描述String的部分,已经说明了如何去设置 %s 等符号, 可以点击去看. 
简单解决方法就是:把%s之类的变量格式替换成%1$s, %1表示第一个位置的变量, $s表示为字符串类型 
例如: 
<string name="welcome_messages">Your First Var is %1$s! You Second Var is %2$d.</string>
 


26,如何导入第三方library库?

导入的前提是lib已经被添加到了当前workspace里面,这样的话就可以使用相对路径了。


方法一:

直接在project.properties里添加:

[java] view plaincopy
  1. target=android-17  
  2. android.library.reference.1=..\\LibSlidingMenu2  


方法二:

手动导入:

Android开发笔记(各错误或知识点汇总)(转)

导入完成后:

Android开发笔记(各错误或知识点汇总)(转)

方法二的和一的区别在于路径引用上,如上图,1,2是方法一来引用的;3,4是方法二引用的。


27,R cannot be resolved to a variable

遇到这种情况可以看一下RES里是否有错误,如果有错误,必然导致R无法成功生成,所以先解决所有资源文件的错误。

1. 检查Android 的SDK是否丢失需要重新下载,检查build path
2. 确保class没有import Android.R;
3, 错误class引用的layout的xml文件没有错误
4. 检查AndroidManifest.xml文件,里边的package,layout配置文件,strings.xml等的字符串全部书写正确
5. layout的xml文件中引用的strings.xml中的字符串拼写完全正确
6. 在layout 的xml文件手写添加一个控件,看id能否在R.java中自动生成,如果不能,那很大可能就是这个layout 的xml文件有问题,查看格式是否使用正确,或者包含什么非法字符串,或者调用到了不正确的字符串,等等,可以使用排除法,挨个去掉控件,直到发现error message消失或者id能在R.java中自动生成。
7. 删掉gen文件夹,使R.java重新自动生成一次,如果不能生成,继续检查layout的xml文件是否有如上不易发觉的问题
8. Clean project ,重新build,或者重新import project。
9. 重启eclipse。

28,当import一个新的android项目时,项目名称上出现一个红色的感叹号,程序不能运行

右键项目---BuildPath---Configure Build Path, 切换libraries标签页,你应该会看到Android Dependencies里红色的X号,也就是说某一个jar包现在不可用了,查看一下是否jar包路径有变化,修复了就没问题了。

还有在我们引用第三方jar包或是自己写的support支持库时,一定记得要在project.properties里添加:android.library=true  否则,其它项目引用此库时,是无法生产库名.jar包名的。