[英]android variable null pointer
我認為我要檢查的變量為null。 我的簡歷方法執行此操作:
此方法檢查網絡上的電子郵件,如果出現問題,將返回-1。 我以為這樣可以。 現在,當我運行它十次時,它開始工作了。 所以我把它給了一個朋友。 他說有時候這給了他例外。
/// Ok found it it was in a try catch in the OnCreate()
tvEmail = (TextView) findViewById(R.id.itemz_email);
tvEmail.setTypeface(TitleFont);
/// and occasionally it didn't even get initialized.
/// I guess ill just init it again in the onResume() just in case.
/// Thanks!
@Override
protected void onResume() {
super.onResume();
tvEmail = (TextView) findViewById(R.id.itemz_email);
tvEmail.setTypeface(TitleFont);
if (EMAIL != null) {
tvEmail.setText("E-mail: " + EMAIL);
} else {
tvEmail.setText("E-mail: No Email Available"); //<----==LINE 77
}
}
這是我的用戶得到的錯誤:
java.lang.RuntimeException: Unable to resume activity {com.codalata.craigslistchecker/com.codalata.craigslistchecker.ItemView}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2578)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2606)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2092)
at android.app.ActivityThread.access$600(ActivityThread.java:133)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1198)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4777)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.codalata.craigslistchecker.ItemView.onResume(ItemView.java:77)<------/**/error/**/
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1184)
at android.app.Activity.performResume(Activity.java:5082)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2568)
我應該這樣檢查並設置嗎?
if(EMAIL == null){
EMAIL = "E-mail: No Email Available"
tvEmail.setText(EMAIL);
}else {
tvEmail.setText("E-mail: " + EMAIL);
}
您在包含tvEmail.setText(...)
的行上收到NullReferenceException
; 交換條件塊以檢查EMAIL
是否為null
與not不會改變任何事情,因為EMAIL
不會參與導致錯誤的行。
您需要查看tvEmail
,因為在發生錯誤時這就是null
。
由於我們知道空指針異常來自第77行:
tvEmail.setText("E-mail: No Email Available"); //<----==LINE 77
我們知道該字符串不能為null,因為它是用引號定義的。 setText方法不能為null,因為方法不是對象,也不能為null!。 這使我們留給tvEmail對象,該對象必須為null導致空指針異常。 請確保該對象已初始化
tvEmail = new TvEmail();//or something similar
為確保此對象為空(檢查我們是否在執行正確的解決方案),請在此行之后插入以下代碼
super.onResume();
插入此:
if(tvEmail == null)
System.out.println("tvEmail is null!!!);
如果tvEmail為null,則您可能想重新計算對象或將其設置為類似於以下內容:
tvEmail = (TextView)findViewById(id);
首先檢查您在Activity或Fragment.etc。的onCreate
方法中聲明了您的對象。如果您想在調用onResume
方法時檢查該對象是否不為null,則它應該看起來像這樣。 記住在else中將為null,因為您說if
不是,則這樣做,否則它的null設置電子郵件不可用,但問題是在else變量中沒有引用,換句話說,它為null,您還應該檢查為什么此時將其null變量。
if (EMAIL != null) {
tvEmail.setText("E-mail: " + EMAIL);
} else {
tvEmail = (TextView)findViewById(id);
tvEmail.setText("E-mail: No Email Available");
}
已編輯
這不是最好的選擇,因為每次調用onResume
都會在其上創建一個新對象。 您應該在調用onResume
之前檢查為什么變量為null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.