안드로이드 스튜디오 오류좀 잡아주세요ㅠㅠ
조회수 1477회
안드로이드 ble스캔 어플을 만드는 중인데 어플 실행까지는 문제없이 진행되는데 실행한 후 startscan을 시작하면서 어플이 강제종료 됩니다. 오류 해결좀 도와주세요
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.bluetooth.le.BluetoothLeScanner.startScan(java.util.List, android.bluetooth.le.ScanSettings, android.bluetooth.le.ScanCallback)' on a null object reference at com.example.myapplication.MainActivity.startScan(MainActivity.java:182) at com.example.myapplication.MainActivity.lambda$onCreate$0$MainActivity(MainActivity.java:141) at com.example.myapplication.-$$Lambda$MainActivity$mssl4La-mhhX0ttBjD5v7QdktdI.onClick(lambda) at android.view.View.performClick(View.java:6205) at android.widget.TextView.performClick(TextView.java:11103) at android.view.View$PerformClick.run(View.java:23653) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6682) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
일단 오류 내용입니다 startscan함수쪽에서 뷰를 가져와 사용하는것에서 문제가 있는 것 같은데 정확히 어떤 문제이고 어떻게 해결해야 하는지 모르겠습니다ㅠㅠ
매인 엑티비티 소스코드 입니다.
package com.example.myapplication;
import android.Manifest; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothManager; import android.bluetooth.le.BluetoothLeScanner; import android.bluetooth.le.ScanCallback; import android.bluetooth.le.ScanFilter; import android.bluetooth.le.ScanResult; import android.bluetooth.le.ScanSettings; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
public class MainActivity extends AppCompatActivity {
//// GUI variables
// text view for status
private TextView tv_status_;
// text view for read
private TextView tv_read_;
// button for start scan
private Button btn_scan_;
// button for stop connection
private Button btn_stop_;
// button for send data
private Button btn_send_;
// button for show paired devices
private Button btn_show_;
// Tag name for Log message
private final static String TAG="Central";
// used to identify adding bluetooth names
private final static int REQUEST_ENABLE_BT= 1;
// used to request fine location permission
private final static int REQUEST_FINE_LOCATION= 2;
// scan period in milliseconds
private final static int SCAN_PERIOD= 5000;
// ble adapter
private BluetoothAdapter ble_adapter_;
// flag for scanning
private boolean is_scanning_= false;
// flag for connection
private boolean connected_= false;
// scan results
private Map<String, BluetoothDevice> scan_results_;
// scan callback
private ScanCallback scan_cb_;
// ble scanner
private BluetoothLeScanner ble_scanner_;
// scan handler
private Handler scan_handler_;
public final static String MAC_ADDR="18:62:E4:3C:2A:1B";
//BLE Scan Callback class
private class BLEScanCallback extends ScanCallback {
private Map<String, BluetoothDevice> cb_scan_results_;
//Constructor
BLEScanCallback(Map<String, BluetoothDevice> _scan_results ){
}
public void onScanResult(int _callback_type, ScanResult _result) {
Log.d(TAG, "onScanResult");
addScanResult(_result);
}
public void onScanFailed(int _error) {
Log.e(TAG,"BLE scan failed with code "+_error);
}
//add scan result
private void addScanResult(ScanResult _result) {
//get scanned device
BluetoothDevice device = _result.getDevice();
//get scanned device Mac address
String device_address = device.getAddress();
//add the device to the result list
cb_scan_results_.put(device_address, device);
//log
Log.d(TAG, "scan results device: " + device);
tv_status_.setText("add scanned device: "+ device_address);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//// get instances of gui objects
// status textview
tv_status_= findViewById( R.id.tv_status );
// read textview
tv_read_= findViewById( R.id.tv_read );
// scan button
btn_scan_= findViewById( R.id.btn_scan );
// stop button
btn_stop_= findViewById( R.id.btn_stop );
// send button
btn_send_= findViewById( R.id.btn_send );
// show button
btn_show_= findViewById( R.id.btn_show );
// ble manager
BluetoothManager ble_manager;
ble_manager = (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
// set ble adapter
ble_adapter_ = ble_manager.getAdapter();
btn_scan_.setOnClickListener((v) -> {startScan(v); });
}
//start scan
private void startScan(View v) {
tv_status_.setText("Scanning...");
// check ble adapter and ble enabled
if(ble_adapter_ == null || !ble_adapter_.isEnabled()){
requestEnableBLE();
tv_status_.setText("Scanning Failed: ble not enabled");
return;
}
//Set scanfilter
//creat filter list
List<ScanFilter> filters = new ArrayList<>();
// create a scan filter with device mac address
ScanFilter scan_filter = new ScanFilter.Builder().setDeviceAddress(MAC_ADDR).build();
// add filter to list
filters.add(scan_filter);
//// scan settings
// set low power scan mode
ScanSettings settings= new ScanSettings.Builder().setScanMode( ScanSettings.SCAN_MODE_LOW_POWER ).build();
// Scan callback
scan_results_ = new HashMap<>();
scan_cb_= new BLEScanCallback(scan_results_);
//now ready to scan
//start scan
ble_scanner_.startScan(filters, settings, scan_cb_);
//set scanning flag
is_scanning_ = true;
}
// Request BLE enable
private void requestEnableBLE() {
Intent ble_enable_intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(ble_enable_intent, REQUEST_ENABLE_BT);
}
// Request Fine Location permission
private void requestLocationPermission() {
requestPermissions( new String[]{ Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_FINE_LOCATION );
}
protected void onResume() {
super.onResume();
//finish app if the BLE is not supported
if( !getPackageManager().hasSystemFeature( PackageManager.FEATURE_BLUETOOTH_LE ) ) {
finish();
}
}
}
자바 초보좀 도와주세요ㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력