質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

1505閲覧

androidstudio ボタン onClick時のエラー

TASKsan

総合スコア17

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/01/10 11:40

編集2019/01/10 11:41

今androidstudioに設置されているボタンを押すとエラーが出て端末が落ちてしまいます。
エラーはしたのように出ています。

androidstudio

1 2 // キャラクタリスティックが書き込まれたときの処理 3 @Override 4 public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { 5 if (BluetoothGatt.GATT_SUCCESS != status) { 6 return; 7 } 8 // キャラクタリスティックごとに個別の処理 9 if (UUID_CHARACTERISTIC_PRIVATE2.equals(characteristic.getUuid())) { 10 runOnUiThread(new Runnable() { 11 public void run() { 12 } 13 }); 14 return; 15 } 16 } 17 }; 18 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_main); 23 24 mButton_go = (Button) findViewById(R.id.go); 25 mButton_go.setOnClickListener(this); 26 mButton_go.setOnLongClickListener(this); 27 mButton_back = (Button) findViewById(R.id.back); 28 mButton_back.setOnClickListener(this); 29 mButton_back.setOnLongClickListener(this); 30 mButton_left = (Button) findViewById(R.id.left); 31 mButton_left.setOnClickListener(this); 32 mButton_left.setOnLongClickListener(this); 33 mButton_right = (Button) findViewById(R.id.right); 34 mButton_right.setOnClickListener(this); 35 mButton_right.setOnLongClickListener(this); 36 37 38 39 mButton_back.setEnabled(false); 40 mButton_go.setEnabled(false); 41 mButton_left.setEnabled(false); 42 mButton_right.setEnabled(false); 43 // Android端末がBLEをサポートしてるかの確認 44 if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { 45 Toast.makeText(this, R.string.ble_is_not_supported, Toast.LENGTH_SHORT).show(); 46 finish(); // アプリ終了宣言 47 return; 48 } 49 50 // Bluetoothアダプタの取得 51 BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); 52 mBluetoothAdapter = bluetoothManager.getAdapter(); 53 if (null == mBluetoothAdapter) { // Android端末がBluetoothをサポートしていない 54 Toast.makeText(this, R.string.bluetooth_is_not_supported, Toast.LENGTH_SHORT).show(); 55 finish(); // アプリ終了宣言 56 return; 57 } 58 } 59 60 // 初回表示時、および、ポーズからの復帰時 61 @Override 62 protected void onResume() { 63 super.onResume(); 64 65 // Android端末のBluetooth機能の有効化要求 66 requestBluetoothFeature(); 67 if (!mDeviceAddress.equals("")) { 68 } 69 70 // 接続ボタンを押す 71 connect(); 72 } 73 74 // 別のアクティビティ(か別のアプリ)に移行したことで、バックグラウンドに追いやられた時 75 @Override 76 protected void onPause() { 77 super.onPause(); 78 79 // 切断 80 disconnect(); 81 } 82 83 // アクティビティの終了直前 84 @Override 85 protected void onDestroy() { 86 super.onDestroy(); 87 88 if (null != mBluetoothGatt) { 89 mBluetoothGatt.close(); 90 mBluetoothGatt = null; 91 } 92 } 93 94 // Android端末のBluetooth機能の有効化要求 95 private void requestBluetoothFeature() { 96 if (mBluetoothAdapter.isEnabled()) { 97 return; 98 } 99 // デバイスのBluetooth機能が有効になっていないときは、有効化要求(ダイアログ表示) 100 Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 101 startActivityForResult(enableBtIntent, REQUEST_ENABLEBLUETOOTH); 102 } 103 104 // 機能の有効化ダイアログの操作結果 105 @Override 106 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 107 switch (requestCode) { 108 case REQUEST_ENABLEBLUETOOTH: // Bluetooth有効化要求 109 if (Activity.RESULT_CANCELED == resultCode) { // 有効にされなかった 110 Toast.makeText(this, R.string.bluetooth_is_not_working, Toast.LENGTH_SHORT).show(); 111 finish(); // アプリ終了宣言 112 return; 113 } 114 break; 115 case REQUEST_CONNECTDEVICE: // デバイス接続要求 116 String strDeviceName; 117 if (Activity.RESULT_OK == resultCode) { 118 // デバイスリストアクティビティからの情報の取得 119 strDeviceName = data.getStringExtra(DeviceListActivity.EXTRAS_DEVICE_NAME); 120 mDeviceAddress = data.getStringExtra(DeviceListActivity.EXTRAS_DEVICE_ADDRESS); 121 } else { 122 strDeviceName = ""; 123 mDeviceAddress = ""; 124 } 125 ((TextView) findViewById(R.id.textview_devicename)).setText(strDeviceName); 126 ((TextView) findViewById(R.id.textview_deviceaddress)).setText(mDeviceAddress); 127 break; 128 } 129 super.onActivityResult(requestCode, resultCode, data); 130 } 131 132 // オプションメニュー作成時の処理 133 @Override 134 public boolean onCreateOptionsMenu(Menu menu) { 135 getMenuInflater().inflate(R.menu.activity_main, menu); 136 return true; 137 } 138 139 // オプションメニューのアイテム選択時の処理 140 @Override 141 public boolean onOptionsItemSelected(MenuItem item) { 142 switch (item.getItemId()) { 143 case R.id.menuitem_search: 144 Intent devicelistactivityIntent = new Intent(this, DeviceListActivity.class); 145 startActivityForResult(devicelistactivityIntent, REQUEST_CONNECTDEVICE); 146 return true; 147 } 148 return false; 149 } 150 @Override 151 public boolean onLongClick(View v){ 152 if(mButton_go.getId()==v.getId()){ 153 Log.d("s", "onLongClick:go "); 154 writeCharacteristic(UUID_SERVICE_PRIVATE,UUID_CHARACTERISTIC_PRIVATE2,"go"); 155 } 156 if(mButton_back.getId()==v.getId()){ 157 writeCharacteristic(UUID_SERVICE_PRIVATE,UUID_CHARACTERISTIC_PRIVATE2,"back"); 158 } 159 if(mButton_right.getId()==v.getId()){ 160 writeCharacteristic(UUID_SERVICE_PRIVATE,UUID_CHARACTERISTIC_PRIVATE2,"right"); 161 } 162 if(mButton_left.getId()==v.getId()){ 163 writeCharacteristic(UUID_SERVICE_PRIVATE,UUID_CHARACTERISTIC_PRIVATE2,"left"); 164 } 165 return false; 166 } 167 @Override 168 public void onClick(View v) { 169 if (mButton_go.getId() == v.getId()) { 170 Log.d("a", "onClick: "); 171 writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "stop"); 172 } 173 if (mButton_back.getId() == v.getId()) { 174 writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "stop"); 175 } 176 if (mButton_left.getId() == v.getId()) { 177 writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "stop"); 178 } 179 if (mButton_right.getId() == v.getId()) { 180 writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "stop"); 181 } 182 } 183 184 185 // 接続 186 private void connect() { 187 if (mDeviceAddress.equals("")) { // DeviceAddressが空の場合は処理しない 188 return; 189 } 190 191 if (null != mBluetoothGatt) { // mBluetoothGattがnullでないなら接続済みか、接続中。 192 return; 193 } 194 195 // 接続 196 BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(mDeviceAddress); 197 mBluetoothGatt = device.connectGatt(this, false, mGattcallback); 198 } 199 200 // 切断 201 private void disconnect() { 202 if (null == mBluetoothGatt) { 203 return; 204 } 205 mBluetoothGatt.close(); 206 mBluetoothGatt = null; 207 } 208 209 // キャラクタリスティックの書き込み 210 private void writeCharacteristic(UUID uuid_service, UUID uuid_characteristic, String string) { 211 212 if (null == mBluetoothGatt) { 213 return; 214 } 215 BluetoothGattCharacteristic blechar = mBluetoothGatt.getService(uuid_service).getCharacteristic(uuid_characteristic); 216 blechar.setValue(string); 217 mBluetoothGatt.writeCharacteristic(blechar); 218 } 219

Er

1E/AndroidRuntime: FATAL EXCEPTION: main 2 Process: com.example.ble_test01, PID: 21383 3 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.bluetooth.BluetoothGattCharacteristic.setValue(java.lang.String)' on a null object reference 4 at com.example.ble_test01.MainActivity.writeCharacteristic(MainActivity.java:472) 5 at com.example.ble_test01.MainActivity.onClick(MainActivity.java:385) 6 at android.view.View.performClick(View.java:5611) 7 at android.view.View$PerformClick.run(View.java:22278) 8 at android.os.Handler.handleCallback(Handler.java:751) 9 at android.os.Handler.dispatchMessage(Handler.java:95) 10 at android.os.Looper.loop(Looper.java:159) 11 at android.app.ActivityThread.main(ActivityThread.java:6097) 12 at java.lang.reflect.Method.invoke(Native Method) 13 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 14 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

エラー文を見ると、ボタンを押した後のエラーというのが分かりますね

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.bluetooth.BluetoothGattCharacteristic.setValue(java.lang.String)' on a null object reference

で取得しているblecharという変数がnullのようです。

この値がnullになっているので、どちからというと

BluetoothGattCharacteristic blechar = mBluetoothGatt.getService(uuid_service).getCharacteristic(uuid_characteristic);

でnullが返却されてしまうパターンがないかを確認してみましょう

投稿2019/01/10 14:00

ueno

総合スコア221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問