2015-07-26 3 views
0

Я пытаюсь добавить элемент в панель действий, но когда я нажимаю на элемент из MainActivity, он показывает исключение NullPointer. Он должен начать эту деятельность. Я также зарегистрировал эту активность в файле манифеста Android! Вот мой код.OnResume метод throws NullPointerException

package milind.com.bluetooth_transmission; 

public class settings extends ActionBarActivity { 
    TextView textConnectionStatus; 
    ListView pairedListView; 
    private BluetoothAdapter mBtAdapter; 
    private ArrayAdapter<String> mPairedDevicesArrayAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) 
    { 
     super.onCreate(savedInstanceState, persistentState); 
     setContentView(R.layout.settings); 
     // Member fields 
     Intent intent = getIntent(); 
     textConnectionStatus = (TextView) findViewById(R.id.connecting); 
     textConnectionStatus.setTextSize(40); 

     // Initialize array adapter for paired devices 
     mPairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name); 

     // Find and set up the ListView for paired devices 
     pairedListView = (ListView) findViewById(R.id.paired_devices); 
     pairedListView.setAdapter(mPairedDevicesArrayAdapter); 


    } 
    @Override 
    public void onResume() 
    { 
     super.onResume(); 
     //It is best to check BT status at onResume in case something has changed while app was paused etc 
     checkBTState(); 

     mPairedDevicesArrayAdapter.clear();// clears the array so items aren't duplicated when resuming from onPause 

     textConnectionStatus.setText(" "); //makes the textview blank 

     // Get the local Bluetooth adapter 
     mBtAdapter = BluetoothAdapter.getDefaultAdapter(); 

     // Get a set of currently paired devices and append to pairedDevices list 
     Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices(); 

     // Add previously paired devices to the array 
     if (pairedDevices.size() > 0) { 
      findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE);//make title viewable 
      for (BluetoothDevice device : pairedDevices) { 
       mPairedDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress()); 
      } 
     } else { 
      mPairedDevicesArrayAdapter.add("no devices paired"); 
     } 
    } 

    //method to check if the device has Bluetooth and if it is on. 
    //Prompts the user to turn it on if it is off 
    public void checkBTState() 
    { 
     // Check device has Bluetooth and that it is turned on 
     mBtAdapter=BluetoothAdapter.getDefaultAdapter(); // CHECK THIS OUT THAT IT WORKS!!! 
     if(mBtAdapter==null) { 
      Toast.makeText(getBaseContext(), "Device does not support Bluetooth", Toast.LENGTH_SHORT).show(); 
      finish(); 
     } else { 
      if (!mBtAdapter.isEnabled()) { 
       //Prompt user to turn on Bluetooth 
       Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
       startActivityForResult(enableBtIntent, 1); 
      } 
     } 
    } 
} 

Вот моя трассировка стеки:

07-26 16:42:58.492 18894-18894/milind.com.bluetooth_transmission E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: milind.com.bluetooth_transmission, PID: 18894 
java.lang.RuntimeException: Unable to resume activity {milind.com.bluetooth_transmission/milind.com.bluetooth_transmission.settings}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.clear()' on a null object reference 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2980) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3011) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2394) 
    at android.app.ActivityThread.access$900(ActivityThread.java:147) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.clear()' on a null object reference 
    at milind.com.bluetooth_transmission.settings.onResume(settings.java:53) 
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1241) 
    at android.app.Activity.performResume(Activity.java:6019) 
    at  android.app.ActivityThread.performResumeActivity(ActivityThread.java:2969) 
+0

Можете ли вы опубликовать stacktrace, пожалуйста? – derpyderp

+0

Я думаю, строка 53 - это строка mPairedDevicesArrayAdapter.clear(); –

+0

Ваш mPairedDevicesArrayAdapter имеет значение null, когда вызывается onResume. Вы должны либо проверить, что он равен нулю, либо создать адаптер вместо возобновления. – derpyderp

ответ

1

Вы переопределяете неправильный метод WithCreate. Вам необходимо переопределить:

protected void onCreate (Bundle savedInstanceState) 
+0

благодарю вас столько –

0

Когда onResume называют все член класса уставками их значение по умолчанию, в этом случае нуле.

http://developer.android.com/training/basics/activity-lifecycle/pausing.html

Когда пользователь возобновляет вашу деятельность со стороны государства помедлил, система вызывает метод onResume(). Помните, что система вызывает этот метод каждый раз, когда ваша деятельность выходит на передний план, в том числе когда она создана впервые. Таким образом, вы должны реализовать onResume() для инициализации компонентов, которые вы публикуете во время onPause(), и выполнять любые другие инициализации, которые должны возникать каждый раз, когда действие переходит в состояние возобновления (например, начинать анимацию и инициализировать компоненты, используемые только во время действия пользователя фокус).

+0

Итак, что мне делать? –

+0

Вы должны повторно инициализировать переменную или в вашем случае, просто удалите эту строку: 'mPairedDevicesArrayAdapter.clear();' – ACV

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