2017-12-17 1 views
0

Mein Co-Captain ist nervig und brach meine Scouting-App, als er versuchte, Bluetooth hinzuzufügen.ListView ist Null

Immer wenn ich dies ausführe, bekomme ich eine error that listview is null. Die listview öffnet einen Dialog und listet die entdeckbaren Geräte auf, mit denen eine Verbindung hergestellt werden kann. Ich habe versucht, die ID pro Anweisungen in einem anderen Beitrag zu ändern und stellte sicher, dass es vor der Ausführung entdeckbare Geräte gab, aber nichts hat funktioniert. Bitte helfen Sie! Das ist mein

auto.java:

private final BroadcastReceiver mBroadcastReceiver1 = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     // When discovery finds a device 
     if (action.equals(mBluetoothAdapter.ACTION_STATE_CHANGED)) { 
      final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, mBluetoothAdapter.ERROR); 

      switch (state) { 
       case BluetoothAdapter.STATE_OFF: 
        Log.d(TAG, "onReceive: STATE OFF"); 
        break; 
       case BluetoothAdapter.STATE_TURNING_OFF: 
        Log.d(TAG, "mBroadcastReceiver1: STATE TURNING OFF"); 
        break; 
       case BluetoothAdapter.STATE_ON: 
        Log.d(TAG, "mBroadcastReceiver1: STATE ON"); 
        break; 
       case BluetoothAdapter.STATE_TURNING_ON: 
        Log.d(TAG, "mBroadcastReceiver1: STATE TURNING ON"); 
        break; 
      } 
     } 
    } 
}; 

private final BroadcastReceiver mBroadcastReceiver2 = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 

     if (action.equals(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED)) { 
      int mode = intent.getIntExtra(BluetoothAdapter.EXTRA_SCAN_MODE, BluetoothAdapter.ERROR); 
      switch (mode) { 
       //Device is in Discoverable Mode 
       case BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE: 
        Log.d(TAG, "mBroadcastReceiver2: Discoverability Enabled."); 
        break; 
       //Device not in discoverable mode 
       case BluetoothAdapter.SCAN_MODE_CONNECTABLE: 
        Log.d(TAG, "mBroadcastReceiver2: Discoverability Disabled. Able to receive connections."); 
        break; 
       case BluetoothAdapter.SCAN_MODE_NONE: 
        Log.d(TAG, "mBroadcastReceiver2: Discoverability Disabled. Not able to receive connections."); 
        break; 
       case BluetoothAdapter.STATE_CONNECTING: 
        Log.d(TAG, "mBroadcastReceiver2: Connecting...."); 
        break; 
       case BluetoothAdapter.STATE_CONNECTED: 
        Log.d(TAG, "mBroadcastReceiver2: Connected."); 
        break; 
      } 
     } 
    } 
}; 

/** 
* Broadcast Receiver that detects bond state changes (Pairing status changes) 
*/ 


    private BroadcastReceiver mBroadcastReceiver3 = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      final String action = intent.getAction(); 
      Log.d(TAG, "onReceive: ACTION FOUND."); 

      if (action.equals(BluetoothDevice.ACTION_FOUND)) { 
       BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       mBTDevices.add(device); 
       Log.d(TAG, "onReceive: " + device.getName() + ": " + device.getAddress()); 
       mDeviceListAdapter = new DeviceListAdapter(context, R.layout.device_adapter_view, mBTDevices); 



       if(lvNewDevices == null) 
       { 
        Toast.makeText(getBaseContext(), " its null you fool and kaitlyn is the best", Toast.LENGTH_LONG).show(); 

       } 
       else{ 
        lvNewDevices.setAdapter(mDeviceListAdapter); 
       } 
      } 
     } 
    }; 
    private final BroadcastReceiver mBroadcastReceiver4 = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      final String action = intent.getAction(); 

      if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) { 

       BluetoothDevice mDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       //3 cases: 
       //case1: bonded already 
       if (mDevice.getBondState() == BluetoothDevice.BOND_BONDED) { 
        Log.d(TAG, "BroadcastReceiver: BND_BONDED."); 
        mBTDevice = mDevice; 
       } 
       //case2: creating a bone 
       if (mDevice.getBondState() == BluetoothDevice.BOND_BONDING) { 
        Log.d(TAG, "BroadcastReceiver: BOND_BONDING."); 
       } 
       //case3: breaking a bond 
       if (mDevice.getBondState() == BluetoothDevice.BOND_NONE) { 
        Log.d(TAG, "BroadcastReceiver: BOND_NONE."); 
       } 
      } 
     } 
    }; 

    @Override 
    protected void onDestroy() { 
     Log.d(TAG, "onDestroy: called."); 
     super.onDestroy(); 

     /*unregisterReceiver(mBroadcastReceiver1); 
     unregisterReceiver(mBroadcastReceiver2); 
     unregisterReceiver(mBroadcastReceiver3); 
     unregisterReceiver(mBroadcastReceiver4); 
     mBluetoothAdapter.cancelDiscovery();*/ 
    } 

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

     Button next = (Button) findViewById(R.id.auto); 
     next.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       Intent myIntent = new Intent(view.getContext(), MainActivity.class); 
       startActivityForResult(myIntent, 0); 
      } 
     }); 
     Button btnONOFF = (Button) findViewById(R.id.btnONOFF); 
     btnEnableDisable_Discoverable = (Button) findViewById(R.id.btnDiscoverable_on_off); 

     mBTDevices = new ArrayList<>(); 

     // btnSend = (Button) findViewById(R.id.btnSend); 
     // etSend = (EditText) findViewById(R.id.editText); 
     IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED); 
     registerReceiver(mBroadcastReceiver4, filter); 
     connectbtn = (Button) findViewById(R.id.connctbtn); 
     mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

     lvNewDevices.setOnItemClickListener(Auto.this); 

     autoGearVal = (EditText) ((findViewById(R.id.autoGears))); 
     autoBallVal = (EditText) ((findViewById(R.id.autoBalls))); 
     match = (EditText) ((findViewById(R.id.matches))); 
     teamVal = (EditText) ((findViewById(R.id.team))); 


     textView = (TextView) findViewById(R.id.textView); 
     saveVal = (Button) findViewById(R.id.save); 
     btnStartConnection = (Button) findViewById(R.id.btnStartConnection); 

     File dir = new File(path); 
     dir.mkdirs(); 

     spinner = (Spinner) findViewById(R.id.spinner); 
     final CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox); 

     connectbtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final ConnectDialog connectDialog = new ConnectDialog(); 
       View view = getLayoutInflater().inflate(R.layout.layout_dialog,null); 
       connectDialog.show(getSupportFragmentManager(), "Connect Dialog"); 
      } 
     }); 


     adapter = ArrayAdapter.createFromResource(this, R.array.Gear_Location, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       sideValue = String.valueOf(parent.getItemAtPosition(position)); 
       Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + " selected", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
      } 
     }); 
     lvNewDevices = (ListView) findViewById(R.id.lvNewDevices); 
    } 


    public void send(String etSend) { 
     byte[] bytes = etSend.getBytes(Charset.defaultCharset()); 
     mBluetoothConnection.write(bytes); 
    } 


    public void enableBT(View view) { 
     Log.d(TAG, "onClick: enabling/disabling bluetooth."); 
     enableDisableBT(); 
    } 

    public void startConnection(View view) { 
     startBTConnection(mBTDevice, MY_UUID_INSECURE); 
    } 

    public void startBTConnection(BluetoothDevice device, UUID uuid) { 
     Log.d(TAG, "startBTConnection:Initializing RFCOM Bluetooth Connection."); 
     mBluetoothConnection.startClient(device, uuid); 
    } 

    public void enableDisableBT() { 
     if (mBluetoothAdapter == null) { 
      Log.d(TAG, "enableDisableBT: Does not have BT capabilities."); 
     } 
     if (!mBluetoothAdapter.isEnabled()) { 
      Log.d(TAG, "enableDisableBT: enabling BT."); 
      Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivity(enableBTIntent); 

      IntentFilter BTIntent = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); 
      registerReceiver(mBroadcastReceiver1, BTIntent); 
     } 
     if (mBluetoothAdapter.isEnabled()) { 
      Log.d(TAG, "enableDisableBT: disabling BT."); 
      mBluetoothAdapter.disable(); 

      IntentFilter BTIntent = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); 
      registerReceiver(mBroadcastReceiver1, BTIntent); 
     } 

    } 

    public void btnEnableDisable_Discoverable(View view) { 
     Log.d(TAG, "btnEnableDisable_Discoverable: Making device discoverable for 300 seconds."); 

     Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
     discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); 
     startActivity(discoverableIntent); 

     IntentFilter intentFilter = new IntentFilter(mBluetoothAdapter.ACTION_SCAN_MODE_CHANGED); 
     registerReceiver(mBroadcastReceiver2, intentFilter); 

    } 

    @RequiresApi(api = Build.VERSION_CODES.M) 
    public void btnDiscover(View view) { 
     Log.d(TAG, "btnDiscover: Looking for unpaired devices."); 

     if (mBluetoothAdapter.isDiscovering()) { 
      mBluetoothAdapter.cancelDiscovery(); 
      Log.d(TAG, "btnDiscover: Canceling discovery."); 

      //check BT permissions in manifest 
      checkBTPermissions(); 

      mBluetoothAdapter.startDiscovery(); 
      IntentFilter discoverDevicesIntent = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
      registerReceiver(mBroadcastReceiver3, discoverDevicesIntent); 
     } 
     if (!mBluetoothAdapter.isDiscovering()) { 

      //check BT permissions in manifest 
      checkBTPermissions(); 

      mBluetoothAdapter.startDiscovery(); 
      IntentFilter discoverDevicesIntent = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
      registerReceiver(mBroadcastReceiver3, discoverDevicesIntent); 
     } 
    } 


    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     //first cancel discovery because its very memory intensive. 
     mBluetoothAdapter.cancelDiscovery(); 

     Log.d(TAG, "onItemClick: You Clicked on a device."); 
     String deviceName = mBTDevices.get(i).getName(); 
     String deviceAddress = mBTDevices.get(i).getAddress(); 

     Log.d(TAG, "onItemClick: deviceName = " + deviceName); 
     Log.d(TAG, "onItemClick: deviceAddress = " + deviceAddress); 

     //create the bond. 
     //NOTE: Requires API 17+? I think this is JellyBean 
     if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) { 
      Log.d(TAG, "Trying to pair with " + deviceName); 
      mBTDevices.get(i).createBond(); 
      mBTDevice = mBTDevices.get(i); 
      mBluetoothConnection = new BluetoothConnectionService((Auto.this)); 
     } 
    } 

XML-Datei:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
     android:id="@+id/lvNewDevices" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignTop="@+id/btnStartConnection" 
     android:layout_marginTop="11dp" /> 

     "more nonsense about buttons" 


</RelativeLayout> 

Fehler:

12-17 21:40:00.405 13246-13246/com.example.owen.scoutingapp2 E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.owen.scoutingapp2, PID: 13246 
                      java.lang.RuntimeException: Error receiving broadcast Intent { act=android.bluetooth.device.action.FOUND flg=0x10 bqHint=4 (has extras) } in [email protected] 
                       at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:1003) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:158) 
                       at android.app.ActivityThread.main(ActivityThread.java:7229) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 
                       at com.example.owen.scoutingapp2.Auto$3.onReceive(Auto.java:151) 
                       at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:993) 
                       at android.os.Handler.handleCallback(Handler.java:739)  
                       at android.os.Handler.dispatchMessage(Handler.java:95)  
                       at android.os.Looper.loop(Looper.java:158)  
                       at android.app.ActivityThread.main(ActivityThread.java:7229)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  

auto.java.151:

lvNewDevices.setAdapter(mDeviceListAdapter); 
+0

Können Sie bitte Ihre logcat veröffentlichen, und der Punkt, in dem Zeile Ihrer geposteten Code, tritt der Fehler auf? – AntCopp

+0

Fügen Sie einfach den Logcat und die Zeile hinzu, wo der Fehler auftritt – rockinthespecs

+0

Verschieben Sie diese Codezeile 'lvNewDevices = (ListView) findViewById (R.id.lvNewDevices);' über 'lvNewDevices.setOnItemClickListener (Auto.this);' und versuchen Sie es. Sie rufen 'onClickListener()' in der Ansicht auf, die nicht initialisiert ist. –

Antwort

0

Ich glaube, ich es gefunden. In dieser Zeile versuchen Sie, den OnItemClickListener festzulegen. Aber das Listview ist noch nicht initialisiert:

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED); 
    registerReceiver(mBroadcastReceiver4, filter); 
    connectbtn = (Button) findViewById(R.id.connctbtn); 
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

    lvNewDevices.setOnItemClickListener(Auto.this); 

    autoGearVal = (EditText) ((findViewById(R.id.autoGears))); 
    autoBallVal = (EditText) ((findViewById(R.id.autoBalls))); 

Sie müssen das Feld 'lvNewDevices' setzen, bevor Sie

tun
lvNewDevices.setOnItemClickListener(Auto.this); 

so diese Linie bewegen

lvNewDevices = (ListView) findViewById(R.id.lvNewDevices); 

über diese

lvNewDevices.setOnItemClickListener(Auto.this); 

und versuchen Sie es erneut .

Jojii

+0

nichts .... immer noch den Fehler – rockinthespecs

+0

Haben Sie bereits mit dem Debuggen versucht? – jojii

Verwandte Themen