在Android 2.3.5上,当enableForegroundDispatch(...)时出现NullPointerException

时间:2013-06-14 09:01:54

标签: android android-layout android-intent android-activity nfc

我在我的Activity中实现了NFC前台调度。当我运行 Android 4.2.1 设备(Samsung Galaxy Nexus)时,代码运行正常。 当我在 Android 2.3.5 设备(HTC Desire S)上运行时,会出现 NullPointerException 。以下是我的Activity的一些代码,onResume()部分中引发了异常:

public class MainActivity extends Activity{
   private NfcAdapter mAdapter; 
   private IntentFilter[] intentFilterArray;
   private PendingIntent pendingIntent;
   private String[][] techArray;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

      mAdapter = NfcAdapter.getDefaultAdapter(this);

      pendingIntent = PendingIntent.getActivity(
                this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

    IntentFilter intentFilter = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);

    intentFilterArray = new IntentFilter[]{intentFilter};
    techArray = new String[][]{new String[]{NdefFormatable.class.getName(), NfcA.class.getName()}};
   }

   @Override
   protected void onResume(){
    super.onResume();
      //NullPointerException here,because mAdapter is Null, why?    
    mAdapter.enableForegroundDispatch(this, pendingIntent, intentFilterArray, techArray);   
   }

   @Override
   public void onPause() {
     super.onPause();
     mAdapter.disableForegroundDispatch(this);
   }
   ...

}

Android 2.3.5 设备上,(LogCat告诉我),当呼叫onResume()时,mAdapter.enableForegroundDispatch(…)中会发生 NullPointerException 。我查了一下,这是因为mAdapter null 。为什么?

1 个答案:

答案 0 :(得分:3)

这是因为如果手机上没有NFC,getDefaultAdapter方法会返回null,如http://developer.android.com/reference/android/nfc/NfcAdapter.html#getDefaultAdapter(android.content.Context)

上所述