关于android手机接收空调机返回数据显示的编程问题。

问题描述

关于android手机接收空调机返回数据显示的编程问题。

这个是关于用android手机接收空调机返回数据显示的编程问题:
在主页HomeActivtiy.java里面,接收空调传过来的数据代码是:
private Runnable mLoop = new Runnable() { //被上面实例调用
public void run() {
int len;
byte[] rbuf = new byte[128];

        do {
            len = mSerial.read(rbuf);     //return mSerial.read(rbuf,rbuf.length)       (注意:这个就是接收空调机的函数)
            // rbuf[len] = 0;
            if (len > 0) {
                if (len == 35) {
                    System.arraycopy(rbuf, 0, mReceiveByte.data, 0, 35);//《J6》第64页
                    mReceiveByte.length = 0;         //这里是给它赋值; 这里与if (mReceiveByte.length != 0) 比较;调用下面的类
                    CheckReceiveBytes(len, mReceiveByte.data);
                    // KJLoger.debug("Read  Length : " + len);

                    Message msg = new Message();     //《疯狂》第210页
                    msg.what = 1;
                    msg.obj = mReceiveByte.data;
                    mHandler.sendMessage(msg);
                    mReceiveByte.clear();
                } else {         //len != 35(在len>0里)即:0<len<35,并且35<len<128
                    if (mReceiveByte.length != 0) {  //与上面作比较;
                        System.arraycopy(rbuf, 0, mReceiveByte.data, mReceiveByte.length, len);  //《J6》第64页
                        CheckReceiveBytes(len, mReceiveByte.data);          //调用下面的函数
                        // KJLoger.debug("Read  Length : " + len);

                        Message msg = new Message();   //《疯狂》第210页
                        msg.what = 1;
                        msg.obj = mReceiveByte.data;
                        mHandler.sendMessage(msg);

                        mReceiveByte.clear();          //调用下面的类的函数
                    } else {        //mReceiveByte.length == 0
                        System.arraycopy(rbuf, 0, mReceiveByte.data, 0, len);   //《J6》第64页

// Intent intent = new Intent(); //注意:怎么把Message转换为Intent
// sendBroadcast(intent);
}

                }
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                //public void printStackTrace ():
                //Writes a printable representation of this Throwable's stack trace to the System.err stream.
                //写一个这个抛出堆栈的一个可打印的代表   到  系统错误流。
                e.printStackTrace();
            }

            if (mStop) {
                mRunningMainLoop = false;
                return;
            }
        } while (true);
    }                   //run()函数结束

    在显示数据的主页ControlActivity2.java中的代码是:
        final Handler mHandler = new Handler() {
    int lenCtrl2;

// ha = new HomeActivity(this);
ObjectInputStream ois;

    @Override
    public void handleMessage(Message msg) {

        if (msg.what == 1) {
            ByteArrayInputStream bais = new ByteArrayInputStream((byte[]) msg.obj);
            try {
                ObjectInputStream ois = new ObjectInputStream(bais);

            } catch (StreamCorruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

           do{
               try {
                lenCtrl2 = (Integer) ois.readObject();
            } catch (OptionalDataException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
               if(lenCtrl2>0){
                   if(lenCtrl2 == 35){
                       System.arraycopy(ois, 0, rbufCtrl2.data, 0, 35);
                       if(rbufCtrl2.data.length == 0)
                      CheckReceiveBytes(lenCtrl2,rbufCtrl2.data);
                       rbufCtrl2.clear();
                   }else{
                       if(rbufCtrl2.length!=0){
                           System.arraycopy(ois, 0, rbufCtrl2.data, 0, lenCtrl2);
                           CheckReceiveBytes(lenCtrl2,rbufCtrl2.data);
                           rbufCtrl2.clear();
                       }else{
                           System.arraycopy(ois, 0, rbufCtrl2.data, 0, lenCtrl2);     //这个才是正常接收。

                           String str1 = Byte.toString(rbufCtrl2.data[18]);
                           String str2 = Byte.toString(rbufCtrl2.data[19]);
                           String str3 = Byte.toString(rbufCtrl2.data[20]);
                           String str4 = Byte.toString(rbufCtrl2.data[24]);
                           String str5 = Byte.toString(rbufCtrl2.data[25]);

                          temperature_theindoor.setText(str1);
                            temperature_theoutdoor.setText(str2);
                            humidity_indoor.setText(str3);
                            temperature_indoorintake.setText(str4);
                            temperature_outdoorintake.setText(str5);
                       }
                   }

               }
           }while(true);
            // temperature_theindoor.setText((char[]) (msg.obj), 18, 1);
            // temperature_theoutdoor.setText((char[]) (msg.obj), 19, 1);
            // humidity_indoor.setText((char[]) (msg.obj), 20, 20);
            // temperature_indoorintake.setText((char[]) (msg.obj), 24, 1);
            // temperature_outdoorintake.setText((char[]) (msg.obj), 25, 1);

        }

    }

    private String IntToHex2(byte Value) {       //被下面的函数调用    ;实际上就是Byte-->Char[](Character)16进制-->String

        char HEX2[] = { Character.forDigit((Value >> 4) & 0x0F, 16), Character.forDigit(Value & 0x0F, 16) };
        String Hex2Str = new String(HEX2);
        return Hex2Str;
    }    

    private void CheckReceiveBytes(int len, byte[] rbuf) {

        StringBuffer rr = new StringBuffer();      //《Java程序设计》第87页

        rr.append(len + "n");

        rr.append(rbuf.length + "n");

        for (byte b : rbuf) {                 //foreach语句
            rr.append(IntToHex2(b) + " ");    //调用上面的函数
        }

        Message msgtest = new Message();
        msgtest.what = 77;                //public int what   Message类的域成员
        msgtest.obj = rr.toString();

        mHandler.sendMessage(msgtest);
    }

    }

; // 这里是new Handler()的结束

// Looper.loop();
// } // 这里是run()的结束

// }

// }

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    // TODO Auto-generated method stub

}

@Override
public void mOnClickHeadMenu() {
    // TODO Auto-generated method stub

}

@Override
public void mOnClickHeadBack() {
    // TODO Auto-generated method stub

}

@Override
public void mOnClickHeadBack2() {
    // TODO Auto-generated method stub

}

}
但是这个程序编译出来之后,接到空调机里面还是接收不到数据,求解答。

以下页面是我要显示页面的图片:

解决方案

两者之间是通过上面进行通信的?

解决方案二:

程序编译出来没有你想要的数据,你应该断点调试程序,从调用mLoop中的run方法开始,一句一句地执行代码,查看每行代码是否执行正确,是否得到预期的结果。

解决方案三:

哦,知道了,谢谢各位的回答!

时间: 2024-11-30 21:13:29

关于android手机接收空调机返回数据显示的编程问题。的相关文章

Android中酷炫返回方式的实现

Android手机都会有返回键,不管是实体键,还是虚拟键.Android用户主要也都是通过这个返回键操控页面返回方式的,不比IOS逼格甚高的只保留一个操作键.这种方式是最普遍的返回方式,还有一种也是比较常见的,那就是页面内部自己响应.绝大多数APP每个页面的设计图顶部左侧都会有一个返回键图标,偶尔也有奇葩的设计放在底部左侧,点击这个图标即finish掉当前页面.简单的介绍完了最常见的两种方式,下面为大家介绍两种更友好的交互方式. 拿大家比较常用的三款社交软件的交互来说.腾讯微博的返回方式除去上述

方法-Android手机通讯录,如何在自带的返回键和menu之间添加联系人按钮/最近通话记录按钮

问题描述 Android手机通讯录,如何在自带的返回键和menu之间添加联系人按钮/最近通话记录按钮 !期望的效果 要做成期望的效果,要怎么写呀,调用哪些方法?求会的人写个实例可好

室内定位-Android手机摄像头接收LED光通信

问题描述 Android手机摄像头接收LED光通信 光通信范畴:用LED以不同频率闪烁(不影响正常照明),手机摄像头接收LED光,识别调制在光上的信息,实现室内定位.各位大神,有涉及过类似的东西么?有的话,希望您可以指点一二.谢谢! 解决方案 感觉智能实现方向,就是发光位置和你的位置的方向,但是发光位置与手机位置的距离应该判断不了.

Android手机 Root 安全问题 机制

本帖转自:        http://su1216.iteye.com/        http://blog.csdn.net/su1216/ 前提:你有一部已经root的android手机,并且手机中有busybox和superuser 写本博客的原因是:有无数用户觉得root没有什么风险,或者风险不会降临到自己头上.这里告诉大家,其实风险就在身边! 1.Android手机Root安全风险篇章一 导读:本文介绍一种简单的病毒以及如何"防御". 这里讲的内容其实对于大多数开发者都不

我想做一个android手机的登陆界面,求指点

问题描述 我想做一个android手机的登陆界面,求指点 服务器是别人做好的.现在想做个登陆界面,但是没有做过,不知道该看什么资料,从哪里着手,请大神指点(如果可以,详细点最好). 解决方案 1.布局设计 2.使用sharedpreferences进行存储账号密码.http://blog.csdn.net/wulianghuan/article/details/8501063 3.将账号密码发送到服务器进行验证.http://blog.csdn.net/guolin_blog/article/d

Android手机通过蓝牙连接佳博打印机的实例代码_Android

所使用的打印机为佳博打印机,支持蓝牙.wifi.usb我所使用的是通过蓝牙来连接. 在网上找到一个佳博官方针对安卓开发的App源码,但是各种的跳转,没有看太懂,所以又去问度娘,找到了一个不错的文章 Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发. 1. 首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限 // 管理蓝牙设备的权限 <uses-permissionandroid:name="

浅析Android手机卫士之号码归属地查询_Android

使用小米号码归属地数据库,有两张表data1和data2 先查询data1表,把手机号码截取前7位 select outkey from data1 where id="前七位手机号" 再查询data2表, select location from data2 where id="上面查出的outkey" 可以使用子查询 select location from data2 where id=(select outkey from data1 where id=&q

浅析Android手机卫士之号码归属地查询

使用小米号码归属地数据库,有两张表data1和data2 先查询data1表,把手机号码截取前7位 select outkey from data1 where id="前七位手机号" 再查询data2表, select location from data2 where id="上面查出的outkey" 可以使用子查询 select location from data2 where id=(select outkey from data1 where id=&q

Android手机通过蓝牙连接佳博打印机的实例代码

所使用的打印机为佳博打印机,支持蓝牙.wifi.usb我所使用的是通过蓝牙来连接. 在网上找到一个佳博官方针对安卓开发的App源码,但是各种的跳转,没有看太懂,所以又去问度娘,找到了一个不错的文章 Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发. 1. 首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限 // 管理蓝牙设备的权限 <uses-permissionandroid:name="