0
所以現在我在註冊我的接收器時收到空指針異常。我以前使用過相同的代碼,沒有錯誤,現在出於某種原因,我收到了錯誤。以下是我的logcat和代碼。我幾乎遵循的GUID的Android網頁上的Android開發人員:http://developer.android.com/guide/topics/connectivity/bluetooth.html註冊藍牙接收器空指針異常
代碼:
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
Log.i(DEV, "YOU ARE HERE");
}
}
};
在哪裏註冊我的接收器:
public void afficher()
{
//Toast.makeText(getBaseContext(),
// "test" + i,
//Toast.LENGTH_SHORT).show();
interger.setText(Float.toString(i));
discovery.setText("Waiting Disc");
if(i >= 500 && i <= 575){
if(btAdapter.isDiscovering()) {
btAdapter.cancelDiscovery();
unregisterReceiver(mReceiver);
}
discovery.setText("Ending Disc");
}else if(i >= 300 && i < 500){
if(!btAdapter.isDiscovering()){
btAdapter.startDiscovery();
registerReceiver(mReceiver, filter);
}
discovery.setText("Starting Disc");
}else if(i == 0){
if(btAdapter.isDiscovering()) {
btAdapter.cancelDiscovery();
unregisterReceiver(mReceiver);
}
discovery.setText("Canceled Disc");
}
i++;
handler.postDelayed(runnable, 1);
}
我在哪裏初始化我的藍牙設備:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get an instance of the SensorManager
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
broadcastText = (EditText) findViewById(R.id.BroadcastText);
broadcastedText = (TextView) findViewById(R.id.BroadcastedText);
connectButton = (Button) findViewById(R.id.ConnectButton);
interger= (TextView)findViewById(R.id.interger);
discovery = (TextView)findViewById(R.id.discovery);
btAdapter = BluetoothAdapter.getDefaultAdapter();
if(btAdapter==null){
Toast.makeText(getApplicationContext(), "No bluetooth detected", 0).show();
finish();
}
else{
if(!btAdapter.isEnabled()){
Intent intent =new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, 1);
}
}
// Register the BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy
Intent discoverableIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);
startActivity(discoverableIntent);
mInitialized = false;
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer , SensorManager.SENSOR_DELAY_NORMAL);
// Instantiate client object
try
{
myClient = CollabrifyClient.newClient(this, GMAIL, DISPLAY_NAME,
ACCOUNT_GMAIL, ACCESS_TOKEN, false);
}
catch(InterruptedException e)
{
Log.e(TAG, "error", e);
}
catch(ExecutionException e)
{
Log.e(TAG, "error", e);
}
tags.add("sample");
runnable.run();
}
Logcat:
02-25 09:41:52.304: E/AndroidRuntime(30748): FATAL EXCEPTION: main
02-25 09:41:52.304: E/AndroidRuntime(30748): Process: edu.umich.imlc.collabrify.collabrify_dummy_app, PID: 30748
02-25 09:41:52.304: E/AndroidRuntime(30748): java.lang.NullPointerException
02-25 09:41:52.304: E/AndroidRuntime(30748): at android.app.ActivityManagerProxy.registerReceiver(ActivityManagerNative.java:2326)
02-25 09:41:52.304: E/AndroidRuntime(30748): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1442)
02-25 09:41:52.304: E/AndroidRuntime(30748): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1410)
02-25 09:41:52.304: E/AndroidRuntime(30748): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1404)
02-25 09:41:52.304: E/AndroidRuntime(30748): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:467)
02-25 09:41:52.304: E/AndroidRuntime(30748): at edu.umich.imlc.collabrify.collabrify_dummy_app.MainActivity.afficher(MainActivity.java:142)
02-25 09:41:52.304: E/AndroidRuntime(30748): at edu.umich.imlc.collabrify.collabrify_dummy_app.MainActivity$2.run(MainActivity.java:120)
02-25 09:41:52.304: E/AndroidRuntime(30748): at android.os.Handler.handleCallback(Handler.java:733)
02-25 09:41:52.304: E/AndroidRuntime(30748): at android.os.Handler.dispatchMessage(Handler.java:95)
02-25 09:41:52.304: E/AndroidRuntime(30748): at android.os.Looper.loop(Looper.java:136)
02-25 09:41:52.304: E/AndroidRuntime(30748): at android.app.ActivityThread.main(ActivityThread.java:5017)
02-25 09:41:52.304: E/AndroidRuntime(30748): at java.lang.reflect.Method.invokeNative(Native Method)
02-25 09:41:52.304: E/AndroidRuntime(30748): at java.lang.reflect.Method.invoke(Method.java:515)
02-25 09:41:52.304: E/AndroidRuntime(30748): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-25 09:41:52.304: E/AndroidRuntime(30748): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-25 09:41:52.304: E/AndroidRuntime(30748): at dalvik.system.NativeStart.main(Native Method)
哪一行是'MainActivity.java'中的第142行? –
registerReceiver(mReceiver,filter);在afficher功能。 –
好的,我相信我剛剛發現我的問題。每當我開始並取消發現時,我都不應該註冊並註銷我的接收器。我應該在我的onCreate中註冊一次,並在我的onDestroy中取消註冊。感謝您看看Hamid,回過頭去尋找那條線讓我意識到我已經多次註冊了它。 –