2012-09-09 54 views
1

我正在嘗試利用Activity在Android設備上啓用藍牙。以下是我擴展了Activity類的課程。當調用startActivityForResult()方法時,我收到NullPointerException錯誤。有什麼建議麼?謝謝!嘗試擴展和使用Android上的活動時出錯

public class Activities extends Activity{ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 
    protected void connectBluetooth(){ 
     Intent intentBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 

     startActivityForResult(intentBluetooth, 0); 
    } 
} 

日誌輸出如下:

?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): java.lang.NullPointerException 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at android.app.Activity.startActivityForResult(Activity.java:3351) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at android.app.Activity.startActivityForResult(Activity.java:3312) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at com.eyesore.bluetooth.Activities.connectBluetooth(Activities.java:28) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at com.eyesore.bluetooth.BluetoothModule.example(BluetoothModule.java:77) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.kroll.runtime.v8.V8Object.nativeFireEvent(Native Method) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.kroll.runtime.v8.V8Object.fireEvent(V8Object.java:60) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.kroll.KrollProxy.doFireEvent(KrollProxy.java:636) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:831) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:307) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at android.os.Handler.dispatchMessage(Handler.java:95) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at android.os.Looper.loop(Looper.java:137) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:104) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15231 E/TiJSError ] 
?:??: W/?(?): (main) [6,293329] ----- Titanium Javascript Runtime Error ----- 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15231 E/TiJSError ] 
?:??: W/?(?): (main) [0,293329] - In app.js:71,12 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15231 E/TiJSError ] 
?:??: W/?(?): (main) [0,293329] - Message: Uncaught Error: Java Exception occurred 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15231 E/TiJSError ] 
?:??: W/?(?): (main) [0,293329] - Source: bluetooth.example(); 
?:??: W/?(?): [ 09-09 18:08:38.517 15231:15246 E/V8Exception ] 
?:??: W/?(?): Exception occurred at app.js:71: Uncaught Error: Java Exception occurred 

清單如下文件 - 基於在OP評論

<manifest> 
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
    <uses-permission android:name="android.permission.BLUETOOTH"/> 
    <uses-permission android:name="android.bluetooth.adapter.action.REQUEST_ENABLE"/> 
     <application> 
      <activity android:name=".Activities" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
    </application>    
</manifest> 
+0

您能編輯您的帖子以顯示崩潰時的LogCat輸出嗎? – Eric

+0

當然。請參閱更新後的帖子。 – Garrett

+0

好的,你什麼時候叫'connectBluetooth'?你應該從'onCreate'調用它。 – Eric

回答

0

,你是不是正確啓動Activity。您應該永遠不會有使用new開始Activity

首先,您的Activites應該是這樣的,它自己調用connectBluetooth()

public class Activities extends Activity{ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     connectBluetooth(); 
    } 
    protected void connectBluetooth(){ 
     Intent intentBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 

     startActivityForResult(intentBluetooth, 0); 
    } 
} 

當Android應用啓動時,它運行的主要Activity,這是defined in the manifest如果Activities是您的主要Activity,那麼將不需要進一步的代碼。

但是,我知道這是第二個Activity,從其他地方開始。所以我們可以說你有這樣的:

public class MainActivity extends Activity{ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Activities testActivities = new Activities(); // This is bad! 
     testActivities.connectBluetooth(); // This too! 
    } 
} 

你應該不是做什麼,是這樣的:

public class MainActivity extends Activity{ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     startActivity(new Intent(this, Activities.class)); // Starts an Activity properly 
    } 
} 

這樣將開始Activity,叫onCreate,並正確地創建您的藍牙連接。您應該在Activity生命週期中閱讀this documentation

+0

這只是我的概念證明,所以目前實際上並沒有任何其他活動。我已經放棄了我的清單文件的上述部分,您是否介意確認這看起來準確?非常感謝你。 – Garrett

+0

看起來不錯。你從哪裏調用'Activities testActivities = new Activities();'? – Eric

+0

我在這個模塊中從主類調用它。該類中唯一的其他邏輯(或者目前在這個模塊中)正在測試以確定是否啓用了藍牙,如果不啓用,我試圖將其關閉。我想要做的邏輯事情是將該邏輯移入connectBluetooth()方法。 – Garrett

相關問題