栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021年华清远见实训

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021年华清远见实训

一、环境

    jdk-8u101-windows-x64

    基于Eclipse的Android开发环境或者 Android studio

    调试工具(内建虚拟机、第三方虚拟机、真机)

    1)推荐第三方安卓虚拟机,内建的虚拟机启动是真的慢。第三方安卓虚拟机如:雷电、夜神、逍遥等。连接步骤:

    系统应用—>设置—>关于平板电脑—>连续点击版本号

    出现开发者选项—->进入开发者选项—->勾选usb调试

    win+r,输入cmd打开命令控制器,将目录切换到你安装雷电模拟器的文件夹下,然后输入

     adb.exe connet 127.0.0.1:5555
    

    其他常见模拟器请对应输入:

    夜神模拟器:adb connect 127.0.0.1:62001

    逍遥安卓模拟器: adb connect 127.0.0.1:21503

    天天模拟器:adb connect 127.0.0.1:6555

    海马玩模拟器 :adb connect 127.0.0.1:53001

    网易MUMU模拟器:adb connect 127.0.0.1:7555

    2)真机调试可参考:https://blog.csdn.net/ShimmerK/article/details/80585186

二、文件夹详解
    src — 存放java代码,包名就是代码存放位置
    gen — 系统自动生成
    Libraries — 存放jar文件,已经打包好了的库文件
    asset — 非主流资源文件夹
    bin — 编译生成的文件
    libs — 用来存放用户要使用的第三方库文件的位置。
    res — 主流资源文件夹
    drawable 存放不同分辨率的贴图
    layout 存放布局文件
    AndroidManifest.xml 存放项目配置参数。
三、常用布局
    LinearLayout 线性布局:内部所有的控件水平或者垂直排成一排。

重要属性

android:gravity=" "
android:layout_gravity=" "
android:layout_weight="  "

layout_gravity :控制控件在父布局中的位置,类比margin;
gravity : 控制控件中内容的显示位置,类比padding

按照比例划分页面
  只有在LinearLayout中才能使用此功能。布局的方向是横向,则可以分配子控件的宽度;布局的方向是纵向,则可以分配子控件的高度。如果要分配宽度或者高度,那么需要设置为0dp后,增加权重属性android:layout_weight="1"

    RelativeLayout 相对布局:需要有参照物,给参照物起名字后再使用。
    常用属性见下:
    android:id="@+id/text1"
    
    //参照物位置(上下左右)
    android:layout_above="@id/text1"
    android:layout_below="@id/text1"
    android:layout_toRightOf="@id/text1"
    android:layout_toLeftOf="@id/text1"
    
    //在上级的中心、水平中心、垂直中心
    android:layout_centerInParent="true
    android:layout_centerHorizontal="true
    android:layout_centerVertical="true"
    
    //对齐上级(上下左右)
    android:layout_alignParentBottom="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    
    //对齐某个参照物的某个方位
    android:layout_alignRight="@id/text1"
    android:layout_alignLeft="@id/text1"
    android:layout_alignBottom="@id/text1"
    android:layout_alignTop="@id/text1"
    
    
四、第三方库使用(hellochart)

​使用第三方库hellochart绘制折线 :
​ 1.将库文件hellocharts-library-1.5.8.jar添加到项目中的libs文件夹下
​ 2.选中项目,点击鼠标右键,点击Build Path — Configure Build Path
​ 3.在弹出的窗口中,切换到Libraries选项卡,点击Add JARs
​ 4.在弹出的窗口中选择添加到项目中的hellocharts-library-1.5.8.jar并确定。
​ 5.点击“Apply and Close”按钮,添加成功!后面可以把库中的统计图作为一个项目中的普通控件来进行使用。

五、网络连接

1.为了确保客户端连接到服务器,需要在运行代码之前将客户端与服务器置于一个热点中。
​ 1)需要使用服务器IP地址找到服务器硬件
​ 2)需要使用服务器软件指定的端口号,找到服务程序
​ 3)在AndroidMainfest.xml中添加权限

2.线程
程序默认只有一个线程,称为主线程。为了避免网络操作阻塞主线程,所以网络操作必须在子线程中执行。具体操作过程:

创建一个简单的子线程

new Thread() {}.start();

加入子线程的的方法体

new Thread() {
	//子线程要执行的代码
	public void run() {
	
	}
}.start();

在run方法中添加子线程要执行的代码。

※Tips:

连接后退出要释放资源(下面的代码可以直接粘贴)

//释放资源
    @Override
    protected void onDestroy() {
        super.onDestroy();
        new Thread() {
            public void run() {
                //释放资源并关闭
                if(mSocket != null && mSocket.isConnected())
                {
                    try {
                        mSocket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }

子线程严禁执行UI操作(即和控件相关的操作)

在子线程中切换到主线程执行

 runOnUiThread(new Runnable() {
         public void run() {
            //TODO 主线程要执行的代码                
         }
     });

如果代码的层次过多,或者代码的格式不规范,可以使用格式化功能重新规整代码。Source->Format

六、数据传输
    给到客户端的数据结构体如下:
    struct conver_env_info {
        int snum;				//仓库编号
        float temperature;		//温度
        float humidity;			//湿度
        float ill;				//光照
        float bet;				//电池电量
        float adc; 				//电位器信息
        signed char x;			//三轴信息
        signed char y;
        signed char z;
    };
    
    使用javolution将C语言中的结构体变量转换为Java中类的对象。在项目中接收服务器数据:
    1)将javolution-5.5.1.jar添加到项目中
    ​2)选中包名,点击鼠标右键,点击New—Class
    ​3)在弹出的窗口中输入Name框的类名后,点击SuperClass后面的“Browse”按钮。
    ​4)在Choose a type中,输入javolution.io.Struct
    ​5)点击Finish按钮
    	//房间编号(本次实训项目只有一个房间)
    	public final Signed32 snum = new Signed32();
    	//温度
    	public final Float32 temperature = new Float32();
    	//湿度
    	public final Float32 humidity = new Float32();
    	//光照
    	public final Float32 ill = new Float32();
    	//电池电压
    	public final Float32 bet = new Float32();
    	//电位器
    	public final Float32 adc = new Float32();
    	//xyz三轴
    	public final Signed8 x = new Signed8();
    	public final Signed8 y = new Signed8();
    	public final Signed8 z = new Signed8();
    

Tips:
模拟数据建议实现的优先级:
光照 > 温度 > 湿度 > 电池电压 = 电位器 >= xyz
真实数据建议实现的优先级:
光照 > xyz > 温度 >= 湿度 > 电池电压 > 电位器

七、控制设备

    命令组成的核心是八个二进制位,用1byte表示一个命令码,格式为:
          ​ |仓库编号2bit|设备编号2bit|保留2bit|设备控制命令码2bit

    //仓库编号
    #define STORE1  0x40	//仓库一
    #define STORE2  0x80	//仓库二,智能家居项目用仓库二
    #define STORE3  0xc0	//仓库三
    
    //设备编号
    #define FAN  0x00    //风扇
    #define BEEP 0x10    //蜂鸣器
    #define LED  0x20    //灯
    
    //设备命令控制码
    FAN_OFF = STORE2|FAN|0x00,  //风扇关闭
    FAN_1 = STORE2|FAN|0x01,    //风扇一档
    FAN_2 = STORE2|FAN|0x02,    //风扇二挡
    FAN_3 = STORE2|FAN|0x03,    //风扇三挡
    
    BEEP_OFF = STORE2|BEEP|0x00,       //蜂鸣器关闭
    BEEP_ON = STORE2|BEEP|0x01,        //蜂鸣器响
    BEEP_ALRRM_OFF = STORE2|BEEP|0x02, //未开放,实际使用10
    BEEP_ALRRM_ON = STORE2|BEEP|0x03,  //未开放,实际使用11
    
    LED_OFF = STORE2|LED|0x00,      //灯关
    LED_ON = STORE2|LED|0x01,       //灯开
    

    例子:
    打开仓库2的灯
       type 00000000    cmd 10100001
    在客户端发送两个byte,一个byte是00000000,另一个byte10100001

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号