前提・実現したいこと
TextViewに取得したBluetoothDeviceの名前を表示させたいです
サブクラスでデバイスを取得してデバイス名をメインクラスで表示させようとしています
アクティビティをセットしてあるクラスです
メソッドでいじるのはよくないのでしょうか?
発生している問題・エラーメッセージ
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.esp32ble, PID: 29278 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.example.esp32ble.MainActivity.setTextName(MainActivity.java:174) at com.example.esp32ble.SubsidyBle.scanAndConnect(SubsidyBle.java:121) at com.example.esp32ble.MainActivity.chartChange(MainActivity.java:160) at com.example.esp32ble.-$$Lambda$TW4Z-_TbHlSaQ3_9pMVQ_fCEm0w.onClick(Unknown Source:2) at android.view.View.performClick(View.java:7217) at android.view.View.performClickInternal(View.java:7191) at android.view.View.access$3500(View.java:828) at android.view.View$PerformClick.run(View.java:27679) at android.os.Handler.handleCallback(Handler.java:900) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:219) at android.app.ActivityThread.main(ActivityThread.java:8349) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
該当のソースコード
java
1public class MainActivity extends AppCompatActivity implements MenuItem.OnMenuItemClickListener { 2 3 private int i = 0; 4 private LineChart chart; 5 private boolean connectState = false; 6 private Button changeButton; 7 private TextView nameText; 8 private final String NOW_CONNECT = "接続を終了"; 9 private final String NOW_DISCONNECT = "接続を開始"; 10 11 private BluetoothManager bluetoothManager; 12 private BluetoothAdapter bluetoothAdapter; 13 private final int duration = Toast.LENGTH_SHORT; 14 private SubsidyBle subBle; 15 16 private BtDialogFragment dialog; 17 private Intent intent; 18 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_main); 23 24 Toolbar Toolbar = findViewById(R.id.main_toolbar); 25 setSupportActionBar(Toolbar); 26 27 changeButton = findViewById(R.id.chart_change); 28 changeButton.setOnClickListener(this::chartChange); 29 nameText = findViewById(R.id.device_name_text); 30 31 lineChart(); 32 intent = new Intent(); 33 subBle = new SubsidyBle(); 34 35 //BLEの設定 36 if( !getPackageManager().hasSystemFeature( PackageManager.FEATURE_BLUETOOTH_LE ) ) { 37 Log.d("BtActivity","Bluetooth is not supported"); 38 finish(); // アプリ終了宣言 39 return; 40 } 41 // Bluetoothアダプタの取得 42 bluetoothManager = (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE); 43 bluetoothAdapter = bluetoothManager.getAdapter(); 44 if( null == bluetoothAdapter ) { 45 // Android端末がBluetoothをサポートしていない 46 Log.d("BtActivity","Bluetooth is not supported"); 47 finish(); // アプリ終了宣言 48 return; 49 } 50 bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 51 52 dialog = new BtDialogFragment(); 53 dialog.show(getSupportFragmentManager(),"my_dialog"); 54 } 55 56~~~~~~~~~~~~~~~ 57 58 //subClassで検出したデバイスの名前を受け取って表示 59 public void setTextName(String deviceName){ 60 Log.d("kiteru?",deviceName); 61 nameText.setText(deviceName); 62 }
java
1private MainActivity m = new MainActivity(); 2 3//ペアデバイスを取得してサーバーに接続する 4 public void scanAndConnect(Context context,BluetoothAdapter bluetoothAdapter){ 5 pairedDevices = bluetoothAdapter.getBondedDevices(); 6 if (pairedDevices.size() > 0) { 7 for (BluetoothDevice device : pairedDevices) { 8 Log.d("pairedDevice","Name:"+device.getName()+"Address:"+device.getAddress()); 9 Toast.makeText(context,"接続を開始します",Toast.LENGTH_SHORT).show(); 10 device = bluetoothAdapter.getRemoteDevice(device.getAddress()); 11 bluetoothGatt = device.connectGatt(context, false, bluetoothGattCallback); 12 m.setTextName("" + device.getName()); 13 } 14 } 15 if (bluetoothGatt == null) { 16 Toast.makeText(context, "ペアリングされたデバイスが存在しません", Toast.LENGTH_SHORT).show(); 17 } 18 Toast.makeText(context,"Bluetooth通信に異常が発生しています",Toast.LENGTH_LONG).show(); 19 }
試したこと
onCreateにfindViewByIdを書いてみた
補足情報(FW/ツールのバージョンなど)
Log.dで取得した文字列は確認できる
ViewのIdはあってる
android studio
java
回答1件
あなたの回答
tips
プレビュー