0

我不知道爲什麼相同的代碼運行在Android 2.3的OK,但是當涉及到Android 3.1平板電腦,它會引發NullPointerException異常......這裏的原因是代碼:怪異的NullPointerException 3.0

public class CalleeButton extends Button implements OnClickListener, AddressAware { 
private AddressText mAddress; 
private OnClickListener externalClickListener; 
public void setExternalClickListener(OnClickListener e) {externalClickListener = e;} 
public void setAddressWidget(AddressText a) {a=mAddress;} 

//set Uri SipUri ,so we can initialize the mAddress inside calleebutton --smartclassroom 
//because every calleebutton will have one sip account/ext. this will replace the information for original mAddress --smartclassroom 
public void setSip(String StudentName,String SipUri, AddressText a) 
{ 
    Log.i("CalleeButton-35"); 
    super.setText(StudentName); 
    //mAddress.setText(SipUri); 
    Log.i("CalleeButton-38"); 
    mAddress.setContactAddress(SipUri, StudentName); 
    Log.i("CalleeButton-40"); 
    setAddressWidget(a); 
    Log.i("CalleeButton-42"); 

} 

public CalleeButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setOnClickListener(this); 

    //must use this line or you got null pointer exception...smartclassroom 
    Log.i("CalleeButton-50"); 
    mAddress = new AddressText(context, attrs); 
    //mAddress = null; 
    Log.i("CalleeButton-52"); 
} 

public void onClick(View v) { 
    try { 
     if (!LinphoneManager.getInstance().acceptCallIfIncomingPending()) { 
      if (mAddress.getText().length() >0) { 
      LinphoneManager.getInstance().newOutgoingCall(mAddress); 
       //add new action here 
       /*******************************************************/ 
       /*******************************************************/ 
      } 
     } 
    } catch (LinphoneCoreException e) { 
     LinphoneManager.getInstance().terminateCall(); 
     onWrongDestinationAddress(); 
    }; 

    if (externalClickListener != null) externalClickListener.onClick(v); 
} 


protected void onWrongDestinationAddress() { 
    Toast toast = Toast.makeText(getContext() 
      ,String.format(getResources().getString(R.string.warning_wrong_destination_address),mAddress.getText().toString()) 
      ,Toast.LENGTH_LONG); 
    toast.show(); 
} 


} 

其實我在Android 2.3平臺得到的NullPointerException一次,但加入後:

mAddress = new AddressText(context, attrs); 

然後編譯和運行順利...直到我嘗試在Android 3.1平板電腦...怪異安裝相同的程序,是不是它呢?請讓我知道我在這方面犯了什麼錯誤,提前致謝!對於logcat的錯誤封郵件是:

04-25 23:58:13.308: ERROR/AndroidRuntime(6728): FATAL EXCEPTION: main 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.linphone/org.linphone.LinphoneActivity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{org.linphone/org.linphone.DialerActivity}: java.lang.NullPointerException 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1751) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.ActivityThread.access$1500(ActivityThread.java:122) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.os.Looper.loop(Looper.java:132) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.ActivityThread.main(ActivityThread.java:4028) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at java.lang.reflect.Method.invoke(Method.java:491) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at dalvik.system.NativeStart.main(Native Method) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{org.linphone/org.linphone.DialerActivity}: java.lang.NullPointerException 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1751) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:1592) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:130) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:342) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:676) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.widget.TabHost.setCurrentTab(TabHost.java:345) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.widget.TabHost.setCurrentTabByTag(TabHost.java:282) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at org.linphone.LinphoneActivity.gotToDialer(LinphoneActivity.java:481) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at org.linphone.LinphoneActivity.fillTabHost(LinphoneActivity.java:207) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at org.linphone.LinphoneActivity.onCreate(LinphoneActivity.java:126) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1715) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  ... 11 more 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728): Caused by: java.lang.NullPointerException 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at org.linphone.DialerActivity.onCreate(DialerActivity.java:128) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1715) 
04-25 23:58:13.308: ERROR/AndroidRuntime(6728):  ... 22 more 

從筆者看來,logcat的封郵件告訴我關於函數:

mCallee1.setSip("Jack","sip:[email protected]",mAddress); 
在DailerActivity.java

(你可以把它當作主要的功能在這裏)引起的NullPointerExcetion,然後我將代碼跟蹤到CalleeButton.java,但仍然無法找到引起空指針異常的點...

回答

1

在該行上設置一個斷點(setSip()),並檢查mCallee1和mAddress變量。一個應該是null。那將是你的問題。然後追溯它並找出它未被實例化的原因 - 或者如果null是變量的有效狀態,只需在調用setSip()之前檢查它爲空。

+0

非常感謝。我會盡力做到這一點。 – shanwu 2012-04-26 01:34:45

+0

設置了異常斷點後,我用eclipse進行調試。我發現變量mCallee1的值爲null。我找不到爲什麼...變量類型的mCallee1(它是CalleeButton)非常類似於mCall(它是CallButton)的變量類型。我嘗試了很多不同的方法試圖解決它,但值仍然是相同的,爲空... – shanwu 2012-04-26 03:34:33

+0

在代碼中編輯您正在運行的代碼。您所發佈的內容中沒有涉及「mCallee1」變量的任何內容。 – kcoppock 2012-04-26 12:41:23

相關問題