android BluetoothChat使用从另一个类发送接收方法

时间:2012-10-08 22:33:39

标签: android bluetooth arduino

您好我使用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)

2 个答案:

答案 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