報空指針異常java
10-17 09:45:41.209 13290-13290/com.supoin.testhard E/AndroidRuntime: FATAL EXCEPTION: main Process: com.supoin.testhard, PID: 13290 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.supoin.testhard/com.supoin.gpslibrary.GpsTestActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.supoin.gpslibrary.Application.getString(int)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.supoin.gpslibrary.Application.getString(int)' on a null object reference at com.supoin.gpslibrary.SectionsPagerAdapter.getPageTitle(SectionsPagerAdapter.java:77) at com.supoin.gpslibrary.GpsTestActivity.initActionBar(GpsTestActivity.java:969) at com.supoin.gpslibrary.GpsTestActivity.onCreate(GpsTestActivity.java:194) at android.app.Activity.performCreate(Activity.java:6042) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) 10-17 09:45:41.219 13290-13290/com.supoin.testhard I/Process: Sending signal. PID: 13290 SIG: 9
return Application.get().getString(R.string.gps_status_tab);
@Override public CharSequence getPageTitle(int position) { switch (position) { case GPS_STATUS_FRAGMENT: return Application.get().getString(R.string.gps_status_tab); case GPS_MAP_FRAGMENT:// return Application.get().getString(R.string.gps_map_tab); case GPS_SKY_FRAGMENT: return Application.get().getString(R.string.gps_sky_tab); } return null; // This should never happen }
再跟蹤問題,是Application.get()
爲null,那麼就是Application 爲空,進入Application.java文件中查看,發現是繼承的Application沒有註冊致使的,解決問題就是在Manifest.xml文件中進行註冊Application.android
只須要給Application標籤增長個name屬性把本身的 Application的名字加入便可。緩存
public class Application extends android.app.Application {//繼承的Application沒有註冊 private static Application mApp; private SharedPreferences mPrefs; public static Application get() { return mApp; } ...
最後在引用的lib文件中的Manifest.xml文件中進行註冊Application.app
<application android:name=".Application" ... ...
問題解決。框架
Application 和Activity,Service同樣,是Android框架的一個系統組件,當Android程序啓動時系統會建立一個application對象,用來存儲系統的一些信息。一般咱們是不須要指定一個Application的,這時系統會自動幫咱們建立。若是須要建立本身的Application,也很簡單建立一個類繼承application並在manifest的application標籤中進行註冊(只須要給application標籤增長一個name屬性把本身的Application的名字定入便可)。ide
Android系統會爲每一個程序運行時建立一個Application類的對象且僅建立一個,能夠說是單例模式的一個類,且application對象的生命週期是整個程序中最長的,他的生命週期就等於這個程序的生命週期。由於他是全局的單例,因此在不一樣的activity,service中得到的對象都是同一個對象,因此經過application來進行一些,數據傳遞,數據共享,數據緩存等操做。oop