0

У меня есть деятельность, где я использую ArrayAdapter, объявленное в самом теле класса:ArrayAdapter NullPointerException в BroadcastReceiver OnReceive

ArrayAdapter<String> btDevArrayAdapter = null; 

в моей функции OnCreate() я делаю следующее:

ListView btDevList = (ListView)findViewById(R.id.btList); 
    ArrayAdapter<String> btDevArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
    btDevList.setAdapter(btDevArrayAdapter); 
    btDevArrayAdapter.add("test"); 

    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 

    if (btDevArrayAdapter==null) { 
     Log.d("ARRAY ADAPTER ON CREATE"," I AM NULL"); 
    } else { 
     Log.d("ARRAY ADAPTER"," I AM INITIALIZED "); //this always shows up 
    } 

позже, зарегистрировать вещательный приемник

registerReceiver(mReceiver, filter); 

и начать устройство ди Bluetooth scovery

btAdapter.startDiscovery(); 

в BroadcastReceiver также объявлены в теле класса:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 

    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     // When discovery finds a device 
     if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
      // Get the BluetoothDevice object from the Intent 
      BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 

      // Add the name and address to an array adapter to show in a ListView 
      if (btDevArrayAdapter==null) { 
       Log.d("ARRAY ADAPTER"," I AM NULL"); // <-- NullPointerException 
      } else { 
       if (device == null) 
        btDevArrayAdapter.add("was null!"); 
       else 
        btDevArrayAdapter.add(device.getAddress()); 
      } 
     } 
    } 
}; 

Глядя на мой LogCat, она всегда выглядит следующим образом:

01-01 02:34:02.200: D/ARRAY ADAPTER(1745): I AM INITIALIZED

01-01 02:34:05.393: D/ARRAY ADAPTER(1745): I AM NULL

Что может вызвать ArrayAdapter стать нулевым?

ответ

1

у вас есть NPE becouse инициировании адаптер, который виден только в OnCreate метод здесь:

ArrayAdapter<String> btDevArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 

изменить его к этому:

btDevArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 

внутри OnCreate-метода.

+0

Ой, как я мог пропустить это. Благодаря! – eliba

Смежные вопросы