从网页:http://www.2cto.com/kf/201208/148253.html这里获取的源代码,新建工程后,出现了很多错误:
█运行时错误:ANDROID.VIEW.INFLATEEXCEPTION:
java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: android.view.InflateException: Binary XML file line #10: Error inflating class xxx
(添加jar包方法错误引起)
java.lang.NullPointerException
(由于无意义命名引起的资源类型引用错误引起.)
============================================
█中文乱码:
解决的方法是:
1)单击乱码的文件,右键选择"Properties",
2)选择"Resource"选项卡
3)选择合适的文本文件编码"Text file encoding"(导入工程后,我的是选择 utf-8 后中文显示正常.)
█为已有的工程添加jar包.
首先参考了http://blog.csdn.net/angle_rupert/article/details/6233600如下的内容:
█导入包的时候的选择问题.
由于源码没有给出import部分,所有导入到工程后需要手动导入包,但是在这里有两个包可以导入:
解决办法:
1)先备份了工程.
2)选择导入第二个选项:"android.opengl"
3)发现随后的下面的两行错误仍然不能消除,便尝试回到1)状态,导入第一个选项"android.graphics"
此时就正确了.
█运行时错误:ANDROID.VIEW.INFLATEEXCEPTION:
首先参考了:http://www.cnblogs.com/pinky878/archive/2012/05/17/2506341.html这里的解释,然后对照自己的,也确实发现了main.xml的问题:
"The following classes could not be found: android.support.v4.view.ViewPaper.class"
这是为什么呢?我们已经导入了android-support-v4.jar包,怎么会没有找到这个类呢?
然后搜索到了发表此文的第一作者的文章:http://www.cnblogs.com/dwinter/archive/2012/02/27/2369590.html
在文章里,ta的工程项目是这样的:
注意到这里ta导入的jar包的上级是"Referenced Libraries",但是我们在上面的方法"NEW"一个Libraries,命名的时候却是不让输入空格的,(如果你没有自己动手导入就不能发现这个了.)
解决的办法是:
1)将已导入的的jar包从项目里移除:选中"UerLaibrary"(我们上面新建的时候命名的.),然后右键选择"Buid Path"(编译路径) | "Remove from Buid path"(从编译路径中移除)
2)直接添加jar包"Add External Archives"而不是"Add Libraries".
添加完成后就是这样子的:
此时到main.xml里发现,没有这样的错误提示:
"The following classes could not be found: android.support.v4.view.ViewPaper.class"
█运行时错误:空指针异常.
java.lang.NullPointerException
eclipse提示没有错误,但是当在模拟器中运行时,出现了错误:
08-18 19:48:24.253: D/dalvikvm(512): GC_EXPLICIT freed 1178 objects / 80056 bytes in 53ms
08-18 20:09:24.452: D/AndroidRuntime(569): Shutting down VM
08-18 20:09:24.452: W/dalvikvm(569): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-18 20:09:24.462: E/AndroidRuntime(569): FATAL EXCEPTION: main
08-18 20:09:24.462: E/AndroidRuntime(569): java.lang.RuntimeException: Unable to start activity ComponentInfo{edu.cquptzx.TabDemo/edu.cquptzx.TabDemo.MainActivity}: java.lang.NullPointerException
08-18 20:09:24.462: E/AndroidRuntime(569): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
08-18 20:09:24.462: E/AndroidRuntime(569): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-18 20:09:24.462: E/AndroidRuntime(569): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-18 20:09:24.462: E/AndroidRuntime(569): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-18 20:09:24.462: E/AndroidRuntime(569): at android.os.Handler.dispatchMessage(Handler.java:99)
08-18 20:09:24.462: E/AndroidRuntime(569): at android.os.Looper.loop(Looper.java:123)
08-18 20:09:24.462: E/AndroidRuntime(569): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-18 20:09:24.462: E/AndroidRuntime(569): at java.lang.reflect.Method.invokeNative(Native Method)
08-18 20:09:24.462: E/AndroidRuntime(569): at java.lang.reflect.Method.invoke(Method.java:521)
08-18 20:09:24.462: E/AndroidRuntime(569): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-18 20:09:24.462: E/AndroidRuntime(569): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-18 20:09:24.462: E/AndroidRuntime(569): at dalvik.system.NativeStart.main(Native Method)
08-18 20:09:24.462: E/AndroidRuntime(569): Caused by: java.lang.NullPointerException
08-18 20:09:24.462: E/AndroidRuntime(569): at edu.cquptzx.TabDemo.MainActivity.InitImageView(MainActivity.java:76)
08-18 20:09:24.462: E/AndroidRuntime(569): at edu.cquptzx.TabDemo.MainActivity.onCreate(MainActivity.java:37)
08-18 20:09:24.462: E/AndroidRuntime(569): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-18 20:09:24.462: E/AndroidRuntime(569): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
08-18 20:09:24.462: E/AndroidRuntime(569): ... 11 more
定位错误:
我们知道是
java.lang.NullPointerException
空指针异常.
为什么会是空指针异常呢?
想起自己在更改源码的时候有一行是这么写的:
将
改成了
之所以这么修改,是因为作者在给资源命名的时候,使用了无意义的字母命名,我将图片资源误更改为了颜色.(注:图片资源在第一作者源码里,
然而我依照http://www.2cto.com/kf/201208/148253.html新建的工程,没有使用图片资源.)
解决的办法是:
引用任意一张图片资源即可,这里就直接引用了"ic_launcher"
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)
.getWidth();
============================================
最后,总结下最快捷实现第一作者的效果:
1.下载第一作者的源码,http://115.com/file/dpi0unyg
2.导入到工程.
3.直接添加jar包(包在libs里)
4部署到模拟器/手机.
---------------------------------------------------------
页面事件测试:
效果图: