0

您好,我正在使用 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 访问它。这是我到目前为止所做的。我将私有 void sendMessage 更改为公共,并在 Config.java 中添加了这些:

BluetoothChat firstClass = new BluetoothChat();

并在 onCreate 这个

firstClass.sendMessage("test");

虽然我在切换到 Config.java 活动时没有收到任何错误,但应用程序崩溃了。
任何人都可以帮我解决这个问题吗?谢谢!

日志猫

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): -- ON STOP -- 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):在 com.example.android.BluetoothChat.BluetoothChat。sendMessage(BluetoothChat.java:218) 10-08 22:49:20.589: E/AndroidRuntime(1541): 在 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): 在 java.lang.reflect.Method.invokeNative(Native方法) 10-08 22:49:20.589: E/AndroidRuntime(1541): 在 java.lang.reflect.Method.invoke(Method.java:507) 10-08 22:49:20.589: E/AndroidRuntime(1541) : 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 10-08 22:49:20.589: E/AndroidRuntime(1541): 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:600)10-08 22:49:20.589:E/AndroidRuntime(1541):在 dalvik.system.NativeStart.main(本机方法)E/AndroidRuntime(1541): 在 java.lang.reflect.Method.invoke(Method.java:507) 10-08 22:49:20.589: E/AndroidRuntime(1541): 在 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)E/AndroidRuntime(1541): 在 java.lang.reflect.Method.invoke(Method.java:507) 10-08 22:49:20.589: E/AndroidRuntime(1541): 在 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)

4

2 回答 2

1

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

所以,你不应该做这样的事情:

BluetoothChat firstClass = new BluetoothChat();

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

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

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

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

PS 我建议阅读一些关于活动及其生命周期的信息,因为如果没有这些知识,开发任何 Android 应用程序都将非常困难。

于 2012-10-08T23:28:09.683 回答
1

您需要 Thread 或 AsyncTask 来通过蓝牙从 Android 发送 ant 消息。看这个简单的例子:http ://english.cxem.net/arduino/arduino5.php

于 2012-10-09T03:20:31.417 回答