2013-02-16 52 views
0

null或空意圖我有,我想實現一個非此即彼的邏輯,開始與活動:測試與Extrasd

我有這樣一行:

Username = getIntent().getExtras().getString("userprofile"); 

如果這是空,我希望它從其他地方分配用戶名...例如

if (Username.equals("")) { 
    Username = Rateit.username; 
} 

但是,它當然會在第一行崩潰。

我爲什麼要這樣做?如果附加內容爲空,此活動將成爲當前登錄用戶的用戶個人資料。還有其他一些場景,您可以點擊其他用戶名(不是您,記錄的用戶),然後使用他們的信息進入SAME活動。

我需要找到更好的邏輯或如何測試null。

logcat的作爲防撞請求:

02-16 14:39:24.088: E/AndroidRuntime(13467): FATAL EXCEPTION: main 
02-16 14:39:24.088: E/AndroidRuntime(13467): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.---.---/com.---.---.profile.ProfileFragmentActivity}: java.lang.NullPointerException 
02-16 14:39:24.088: E/AndroidRuntime(13467): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at android.app.ActivityThread.access$600(ActivityThread.java:130) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at android.os.Looper.loop(Looper.java:137) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at android.app.ActivityThread.main(ActivityThread.java:4745) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at java.lang.reflect.Method.invokeNative(Native Method) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at java.lang.reflect.Method.invoke(Method.java:511) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at dalvik.system.NativeStart.main(Native Method) 
02-16 14:39:24.088: E/AndroidRuntime(13467): Caused by: java.lang.NullPointerException 
02-16 14:39:24.088: E/AndroidRuntime(13467): at com.---.---.profile.ProfileFragmentActivity.onCreate(ProfileFragmentActivity.java:85) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at android.app.Activity.performCreate(Activity.java:5008) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
02-16 14:39:24.088: E/AndroidRuntime(13467): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
02-16 14:39:24.088: E/AndroidRuntime(13467): ... 11 more 
+0

當程序崩潰時會出現什麼錯誤?請從logcat發佈堆棧跟蹤。 – 2013-02-16 22:52:39

+0

根據您的請求添加 – KickingLettuce 2013-02-16 22:55:08

回答

2

如果沒有任何演員,getExtras()返回null。所以,它會在getString()上拋出異常。你需要拆分該行來檢查它是否爲null。

userName = ""; 
Bundle extras = getIntent().getExtras(); 
if(extras != null) 
{ 
    userName = extras.getString("userprofile", ""); 
} 

還要注意添加""論點getString(),以避免有一個返回null。這僅適用於API> = 12.如果未找到"userprofile"字符串extra,則所有API級別中可用的單參數getString()將返回null,因此您只需要對返回的字符串進行空檢查。

+0

就是這樣..雖然它說'getString'需要API 12這很奇怪嗎? – KickingLettuce 2013-02-16 23:06:28

+1

直到那時,兩個參數'getString()'顯然不被添加。奇怪。編輯答案反映。 – Geobits 2013-02-16 23:12:06

+0

謝謝...有它在所有API的工作。標記正確! – KickingLettuce 2013-02-16 23:20:18