android蓝牙聊天使用来自另一个类的发送-接收方法



Hello im使用BluetoothChat示例与arduino通信。到目前为止一切都正常,现在我想访问sendMessage()方法,以便能够不是从主类而是从我创建的另一个类发送数据。这是BluetoothChat.java 中的Bluetooth聊天发送功能

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();

并在上创建此

firstClass.sendMessage("test");

虽然我在切换到Config.java活动时没有收到任何错误,但应用程序崩溃了
有人能帮我吗?谢谢!

logcat

10-08 22:49:15.125:D/dalvikvm(1541):GC_EXTERNAL_ALLOC释放98K,47%释放2962K/55511K,外部3943K/4883K,暂停23ms10-08 22:49:15.128:D/蓝牙插座(1541):插座已处于关闭状态:android.bluetooth.BluetoothSocket@40535c8810-08 22:49:15.128:D/蓝牙插座(1541):插座已处于关闭状态:android.bluetooth.BluetoothSocket@40523b1010-08 22:49:15.296:E/蓝牙聊天(1541):--停止--10-08 22:49:20.585:D/AndroidRuntime(1541):关闭VM10-08 22:49:20.585:W/dalvikvm(1541):线程ID=1:线程退出,出现未捕获的异常(组=0x40015578)10-08 22:49:20.589:E/AndroidRuntime(1541):致命异常:main10-08 22:49:20.589:E/AndroidRuntime(1541):java.lang.NullPointerException10-08 22:49:20.589:E/AndroidRuntime(1541):在com.example.android.BluetoothChat.BluetoethChat.sendMessage(BluetoothChat.java:218)10-08 22:49:20.589:E/AndroidRuntime(1541):在com.example.android.BluetoothChat.Config.oItemSelected(Config.java:45)10-08 22:49:20.589:E/AndroidRuntime(1541):在android.widget.AdaperView.fireOnSelected(AdapterView.java:871)10-08 22:49:20.589:E/AndroidRuntime(1541):在android.widget.AdaperView.access$200(AdapterView.java:42)10-08 22:49:20.589:E/AndroidRuntime(1541):在android.widget.AdaperView$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(ActivityThreads.java:3687)10-08 22:49:20.589:E/AndroidRuntime(1541):位于java.lang.reflect.Method.invokeNative(Native Method)10-08 22:49:20.589:E/AndroidRuntime(1541):在java.lang.reflect.Method.ioke(Method.java:507)10-08 22:49:20.589:E/AndroidRuntime(1541):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteIndit.java:842)10-08 22:49:20.589:E/AndroidRuntime(1541):在com.android.internal.os.ZygoteInit.main(ZygoteNit.java:600)10-08 22:49:20.589:E/AndroidRuntime(1541):在dalvik.system.NativeStart.main(Native Method)

BluetoothChat类是一个活动。活动对象由Android操作系统管理(调用created、onCreate、onResume等方法)。

所以,你不应该这样做:

BluetoothChat firstClass = new BluetoothChat();

有几种方法可以重用此功能

a) 从BluetoothChat复制并粘贴到Config(让我们暂时忘记代码复制)。

您需要从onCreate、onStart和其他管理mBluetoothAdaptor方法的方法复制代码

b) 如果要同时保留BluetoothChat活动和Config活动,则可以将可重用代码移动到某个助手类(不是活动),并在这两个活动中使用它。

附言:我建议你读一点关于活动及其生命周期的知识,因为如果没有这些知识,开发任何android应用程序都会非常困难。

您需要Thread或AsyncTask通过蓝牙从Android发送蚂蚁消息。请参阅以下简单示例:http://english.cxem.net/arduino/arduino5.php

最新更新