Java 将数据连续地从类传递到活动

Java 将数据连续地从类传递到活动,java,android,bluetooth,Java,Android,Bluetooth,我是android初学者。我项目的目标是从蓝牙接收到的连续数据中绘制图形,该数据由x、y、z值组成。现在我想将这些值传递给另一个活动,该活动将从中绘制图形。我已获取Blueterm应用程序源代码,并对其进行扩展,以提取accel x、y,我的问题是,意图是否能完成任务,还是需要使用其他方法? 下面是连续接收数据的线程类: private class ConnectedThread extends Thread { private final BluetoothSocket mmS

我是android初学者。我项目的目标是从蓝牙接收到的连续数据中绘制图形,该数据由x、y、z值组成。现在我想将这些值传递给另一个活动,该活动将从中绘制图形。我已获取Blueterm应用程序源代码,并对其进行扩展,以提取accel x、y,我的问题是,意图是否能完成任务,还是需要使用其他方法? 下面是连续接收数据的线程类:

    private class ConnectedThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final InputStream mmInStream;
    private final OutputStream mmOutStream;


    public ConnectedThread(BluetoothSocket socket) {
        Log.d(TAG, "create ConnectedThread");
        mmSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        // Get the BluetoothSocket input and output streams
        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) {
            Log.e(TAG, "temp sockets not created", e);
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;
    }

    public void run() {
        Log.i(TAG, "BEGIN mConnectedThread");
        byte[] buffer = new byte[128];
        int bytes;

        // Keep listening to the InputStream while connected
        while (true) {
            try {

                // Read from the InputStream
                bytes = mmInStream.read(buffer);
                int buflen=buffer.length;
                String str = new String(buffer, "UTF-8"); // prints character
                Log.d("Data Transmitted", str);
                int slen=str.length();
                String sl=String.valueOf(slen);
                Log.d("String length",sl);
                int spaceIndex = str.indexOf(" ");
                if (spaceIndex != -1)
                {
                    str = str.substring(0, spaceIndex);
                }
              //  Log.d("Data Edited", str);
                boolean v1=str.contains("a");                   
                boolean v2=str.contains("b");
                boolean v3=str.contains("c");
                boolean v4=str.contains("d");

                int count1 = str.length() - str.replace("a", "").length();
                int count2 = str.length() - str.replace("b", "").length();
                int count3 = str.length() - str.replace("c", "").length();
                int count4 = str.length() - str.replace("d", "").length();
                int count5 = str.length() - str.replace("e", "").length();
                int count6 = str.length() - str.replace("f", "").length();


                if(v1==true && v2==true && v3==true && v4==true && count1==1 && count2==1 && count3==1 && count4==1 && count5==1 && count6==1){
                int v= str.indexOf("a");
                int r= str.indexOf("b");
                int s= str.indexOf("c");
                int k= str.indexOf("d");

               // System.out.println(v);
              //  System.out.println(r);
               // System.out.println(s);
              //  System.out.println(k);
               if(v<r && r<s && s<k){
                String op1=str.substring(str.indexOf("a")+1, str.indexOf("b"));
                double value1 = Double.parseDouble(op1);
                Log.d("Accel-X", op1);
                System.out.print(value1);
                String op2=str.substring(str.indexOf("b")+1, str.indexOf("c"));
                double value2 = Double.parseDouble(op2);
                Log.d("Accel-Y", op2);
                System.out.print(value2);
                String op3=str.substring(str.indexOf("c")+1, str.indexOf("d"));
                double value3 = Double.parseDouble(op3);
                Log.d("Accel-Z", op3);
                System.out.print(value3);
              //  mEmulatorView.write(buffer, bytes);
             //   seriesX.add(new GraphViewData(dataCount, sensorX));

                }
                else{

                //mEmulatorView.write(buffer, bytes);
                }
                // Send the obtained bytes to the UI Activity
                //mHandler.obtainMessage(BlueTerm.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
            }} catch (IOException e) {
                Log.e(TAG, "disconnected", e);
                connectionLost();
                break;
            }
        }
    }

在我看来,你有几个选择

最简单的方法是将数据收集类放在活动中的一个线程中,在这里您可以直接发布到UI

第二种方法是将数据收集代码放在Android服务中并绑定到该服务。您可以创建一个带有回调的接口,并将数据返回到“活动”。这个方法有很多接口和绑定代码

我会将数据收集代码放在服务或IntentService的后台线程中。然后通过[EventBus][1]发布数据更新。倾听活动中的事件。非常干净和容易