從網頁: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部署到模擬器/手機.
---------------------------------------------------------
頁面事件測試:
效果圖: