2014-02-25 29 views
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) 
+0

哪一行是'MainActivity.java'中的第142行? –

+0

registerReceiver(mReceiver,filter);在afficher功能。 –

+0

好的,我相信我剛剛發現我的問題。每當我開始並取消發現時,我都不應該註冊並註銷我的接收器。我應該在我的onCreate中註冊一次,並在我的onDestroy中取消註冊。感謝您看看Hamid,回過頭去尋找那條線讓我意識到我已經多次註冊了它。 –

回答

0

我發現我多次註冊接收器,其中一個我正在使用空過濾器。