您好我使用BluetoothChat示例以便与arduino进行通信。到目前为止一切都工作,现在我想访问sendMessage()方法,以便能够发送不是来自主类的数据,而是来自我创建的另一个数据。这是BluetoothChat.java中的BluetoothChat发送功能
private void sendMessage(String message) {
// Check that we're actually connected before trying anything
if (mChatService.getState() != BluetoothChatService.STATE_CONNECTED) {
Toast.makeText(this, R.string.not_connected, Toast.LENGTH_SHORT).show();
return;
}
// Check that there's actually something to send
if (message.length() > 0) {
// Get the message bytes and tell the BluetoothChatService to write
byte[] send = message.getBytes();
mChatService.write(send);
// Reset out string buffer to zero and clear the edit text field
mOutStringBuffer.setLength(0);
mOutEditText.setText(mOutStringBuffer);
}
}
现在我想从我的Config.java访问它。这是我到目前为止所做的。我将private void sendMessage更改为public,并在Config.java中添加了以下内容:
BluetoothChat firstClass = new BluetoothChat();
并在onCreate this
firstClass.sendMessage("test");
虽然我在切换到Config.java活动时没有收到任何错误但应用程序崩溃了。
谁能帮我这个?
感谢名单!
logcat的
10-08 22:49:15.125:D / dalvikvm(1541):GC_EXTERNAL_ALLOC释放98K,47%免费2962K / 5511K,外部3943K / 4883K,暂停23ms 10-08 22:49:15.128:D / BluetoothSocket(1541):套接字已处于关闭状态:android.bluetooth.BluetoothSocket@40535c88 10-08 22:49:15.128:D / BluetoothSocket(1541):套接字已处于关闭状态:android.bluetooth.BluetoothSocket@40523b10 10-08 22:49:15.296:E / BluetoothChat(1541): - 停止 - 10-08 22:49:20.585:D / AndroidRuntime(1541):关闭VM 10-08 22:49:20.585:W / dalvikvm(1541):threadid = 1:线程退出未捕获异常(组= 0x40015578) 10-08 22:49:20.589:E / AndroidRuntime(1541):致命异常:主要 10-08 22:49:20.589:E / AndroidRuntime(1541):java.lang.NullPointerException 10-08 22:49:20.589:E / AndroidRuntime(1541):at com.example.android.BluetoothChat.BluetoothChat.sendMessage(BluetoothChat.java:218) 10-08 22:49:20.589:E / AndroidRuntime(1541):at com.example.android.BluetoothChat.Config.onItemSelected(Config.java:45) 10-08 22:49:20.589:E / AndroidRuntime(1541):在android.widget.AdapterView.fireOnSelected(AdapterView.java:871) 10-08 22:49:20.589:E / AndroidRuntime(1541):在android.widget.AdapterView.access $ 200(AdapterView.java:42) 10-08 22:49:20.589:E / AndroidRuntime(1541):在android.widget.AdapterView $ SelectionNotifier.run(AdapterView.java:837) 10-08 22:49:20.589:E / AndroidRuntime(1541):在android.os.Handler.handleCallback(Handler.java:587) 10-08 22:49:20.589:E / AndroidRuntime(1541):在android.os.Handler.dispatchMessage(Handler.java:92) 10-08 22:49:20.589:E / AndroidRuntime(1541):在android.os.Looper.loop(Looper.java:130) 10-08 22:49:20.589:E / AndroidRuntime(1541):在android.app.ActivityThread.main(ActivityThread.java:3687) 10-08 22:49:20.589:E / AndroidRuntime(1541):at java.lang.reflect.Method.invokeNative(Native Method) 10-08 22:49:20.589:E / AndroidRuntime(1541):at java.lang.reflect.Method.invoke(Method.java:507) 10-08 22:49:20.589:E / AndroidRuntime(1541):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:842) 10-08 22:49:20.589:E / AndroidRuntime(1541):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 10-08 22:49:20.589:E / AndroidRuntime(1541):at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
BluetoothChat类是一项活动。活动对象由Android OS管理(创建,onCreate,onResume和其他方法被调用)。
所以,你不应该这样做:
BluetoothChat firstClass = new BluetoothChat();
有几种方法可以重用此功能
a)从BluetoothChat复制并粘贴到Config(让我们一秒钟忘记代码重复)。
您需要从onCreate,onStart和其他管理mBluetoothAdaptor方法的方法中复制代码
b)如果您要同时保留BluetoothChat活动和Config活动,您可以将可重用代码移动到某个帮助程序类(这不是活动)并从两个活动中使用它。
P.S。我建议您阅读一些关于活动及其生命周期的内容,因为如果没有这些知识,开发任何Android应用程序将非常困难。
答案 1 :(得分:1)
您需要Thread或AsyncTask才能通过蓝牙从Android发送任何消息。 请参阅此简单示例:http://english.cxem.net/arduino/arduino5.php