智能农业的实现

前言:前面我们学习了一系列的Android基础知识点,而一些重要知识点将在我们的实战项目中灵活运用到。

关于智能农业

这是一款基于Android开发的农业管理系统,通过移动端(Android)来监控空气温湿度,土壤温湿度,二氧化碳浓度以及光照强度的变化。通过移动端来控制风扇、水泵、LED灯以及警报器的开关,该系统可以有效得管理农业,实现检测农作物的状况等功能。


系统功能的需求

1、 连接服务器,获取沙盘各项数据

开始页面需要弹出一个对话框,这里我们需要根据相应的IP地址来获取对应的沙盘数据。

我们需要创建一个XML布局文件,显示出对话框:

效果图:

这里我们先不忙根据指定的IP地址获取到对应沙盘的数据,后面会进行重新修改。

2、实现各页面的滑动或切换功能

这里我们会用到Fragment+ViewPager的知识点
几个注意点:

  • 创建Adapter的时候,新建类继承FragmentPagerAdapter
public class MyPageAdapter extends FragmentPagerAdapter
  • 实现构造方法
 public MyPageAdapter(FragmentManager fm, List<Fragment> fragmentList) {super(fm);this.fragmentList = fragmentList;}
  • 创建适配器时所需要的两个参数
MyPageAdapter adapter = new MyPageAdapter(getSupportFragmentManager(), fragmentList);

#####3、用OkHttp获取数据,服务器通过JSON数据格式返回给请求者
依赖包:

implementation 'com.squareup.okhttp3:okhttp:3.10.0'
  1. 创建Okhttp类
public class Okhttp {private static OkHttpClient client = new OkHttpClient();public static void sendOkHttpRequest(String address,okhttp3.Callback callback){Request request = new Request.Builder().url(address).build();//创建Request对象,传递请求体client.newCall(request).enqueue(callback);//回调方法的使用与get异步请求相同}public static void postJsonByOkHttp(String url, JSONObject jsonObject,okhttp3.Callback callback){MediaType mediaType = MediaType.parse("application/json;Charset=UTF-8");RequestBody requestBody = RequestBody.create(mediaType,jsonObject.toString());Request request = new Request.Builder().url(url).post(requestBody).build();client.newCall(request).enqueue(callback);}}

2、接下来就是根据之前的对话框输入的IP地址来获取co2浓度值等数据

 Intent intent = getActivity().getIntent();String relativeUrl = intent.getStringExtra("IP");basicUrl = "http://"+relativeUrl+":8890/type/jason/action/";
 @Overridepublic void onResponse(Call call, final Response response) throws IOException {flag++;String responseString = null;try {responseString = response.body().string();} catch (IOException e) {e.printStackTrace();}Log.e(TAG, "onResponse: getval"+ responseString);Gson gson = new Gson();App app = gson.fromJson(responseString,App.class);airHumidity = app.getAirHumidity();PM25 = app.getPM25();airTemperature = app.getAirTemperature();soilTemperature = app.getSoilTemperature();co2 = app.getCo2();soilHumidity = app.getSoilHumidity();light = app.getLight();}
4、获取开关控制状态

1、创建实体类

public class AppStatus {private int WaterPump;private int Blower;private int Roadlamp;private int Buzzer;private String result;public int getWaterPump() {return WaterPump;}public void setWaterPump(int waterPump) {WaterPump = waterPump;}public int getBlower() {return Blower;}public void setBlower(int blower) {Blower = blower;}public int getRoadlamp() {return Roadlamp;}public void setRoadlamp(int roadlamp) {Roadlamp = roadlamp;}public int getBuzzer() {return Buzzer;}public void setBuzzer(int buzzer) {Buzzer = buzzer;}public String getResult() {return result;}public void setResult(String result) {this.result = result;}
}

2、获取开关状态

@Overridepublic void onResponse(Call call, final Response response) throws IOException {String responseString = null;try {responseString = response.body().string();} catch (IOException e) {e.printStackTrace();}Log.e(TAG, "onSuccess: "+responseString );Gson gson = new Gson();AppStatus appStatus = gson.fromJson(responseString,AppStatus.class);Status.WaterPump = appStatus.getWaterPump();Status.Blower = appStatus.getBlower();Status.Roadlamp = appStatus.getRoadlamp();Status.Buzzer = appStatus.getBuzzer();Status.resultStr = appStatus.getResult();}

3、点击开关按钮实现图片切换

    private  void modifierBlowerStatus() {if (Status.Blower == 0) {openFanImg.setImageResource(R.mipmap.dakaifengshan);DeviceControl.Result = 0;} else if (Status.Blower == 1) {openFanImg.setImageResource(R.mipmap.dakaifengshan2);DeviceControl.Result = 1;}}
5、其它知识点
  • 将图片转换成圆形
    导入依赖包:
 compile 'com.makeramen:roundedimageview:2.2.1'

XML布局修改

    <com.makeramen.roundedimageview.RoundedImageViewapp:riv_oval="true"android:id="@+id/co2_img"android:layout_width="120dp"android:layout_height="120dp"android:layout_margin="10dp"android:src="@mipmap/co2" />

效果图:

  • Fragment内部实现图片滑动
ImgAFragment imgAFragment = new ImgAFragment();ImgBFragment imgBFragment = new ImgBFragment();fragmentImgList.add(imgAFragment);fragmentImgList.add(imgBFragment);MyImgPageAdapter adapter1 = new MyImgPageAdapter(getChildFragmentManager(), fragmentImgList);ImgVp.setAdapter(adapter1);

实战项目——智能农业沙盘相关推荐

  1. Android开发项目——智能农业(知识点整理回顾)

    前言:智能农业这个项目可以说是大多都是我们自己完成的.是对于前一个多月Android学习的一个检验,同时也是对我们成绩的一个凭据.意义非常重大. 一.对于布局方面 下面我放两张例图,是我认为在布局上对 ...

  2. Android项目——智能农业

    总结一下这一周关于智能农业APP项目的学习. ####一.布局 APP最重要的就是与用户的交互界面,布局很重要.在智能农业APP这个项目中,布局十分简单,用户不需要花费多少时间便能熟练使用. #### ...

  3. 安卓开发项目——智能农业

    智能农业的开发步骤 首先需要导一下数据包. compile 'com.makeramen:roundedimageview:2.2.1'--让图片变成圆形的效果compile 'com.loopj.a ...

  4. 树莓派开发实战项目 智能家居--简单工厂模式(简单工厂模式介绍)

    一.搭建模型 二.设计模式的概念引入 1.什么是设计模式 软件设计模式(Design pattern),又称设计模式,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是 ...

  5. 树莓派开发实战项目 智能家居--简单工厂模式(摄像头图片获取)

    一.添加UVC驱动 有些程序采用V4L2编程,会访问到/dev/videoX设备,因此需要添加UVC驱动,针对树莓派3B/3B+可以采用如下的方法添加bcm2835-v4l2驱动: pi@raspbe ...

  6. Hi3861鸿蒙物联网项目实战:智能安防报警

    华清远见FS-Hi3861开发套件,支持HarmonyOS 3.0系统.开发板主控Hi3861芯片内置WiFi功能,开发板板载资源丰富,包括传感器.执行器.NFC.显示屏等,同时还配套丰富的拓展模块. ...

  7. Hi3861鸿蒙物联网项目实战:智能测距仪

    华清远见FS-Hi3861开发套件,支持HarmonyOS 3.0系统.开发板主控Hi3861芯片内置WiFi功能,开发板板载资源丰富,包括传感器.执行器.NFC.显示屏等,同时还配套丰富的拓展模块. ...

  8. 测速源码_物联网之智能平衡车开发实战项目(附源码)

    自从上次分享了"适合练手的10个前端实战项目(附源码)"之后,很多小伙伴就私信问有没有物联网相关的实战项目教程,那么今天就给大家分享一个物联网工作初期经常接触的项目:智能平衡车开发 ...

  9. 再次升级,985博士整理的71个OpenCV实战项目教程开放下载!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 近期小白学视觉公众号推出了多篇Python+OpenCV实战项目的 ...

最新文章

  1. 【POJ】1308 Is It A Tree?((并查集 + set)or (map))
  2. MFC类中获得其它类指针
  3. 数据结构与算法之复制含有随机指针节点的链表和两个链表相交的一系列问题
  4. BigDecimal类的使用
  5. 集合源码阅读:ArrayList
  6. 高校各部门老师真实生活图鉴,哈哈哈哈哈哈哈
  7. hp380g5 安装linux7,hp 380G5 安装centos 7
  8. 看似毫不相干,哲学与机器学习竟有如此大的交集?
  9. back propagation反向传播(浅层神经网络分析示例)
  10. 如何利用大数据技术构建用户画像
  11. ubuntu 安装python3.6后,terminal终端打不开问题
  12. 基于javaweb+jsp的大学生个人财务记账系统(带报告文档)
  13. C语言编程练习---2021山东理工大学ACM 实验一J---X题解
  14. STM32469iDiscovery + LVGL 窗帘现象
  15. 爬取三千条数据需要多久_数字科学家赚多少钱?我爬取近 6 年三千份数据后发现了这些秘密...
  16. Ubuntu死机卡死问题
  17. android studio 如何查看帮助文档
  18. 弹性容器----六大属性(5、项目在交叉轴上的对齐方式)
  19. linux系统应用学习(三)--- 动态库静态库
  20. Strace 解决性能问题案例一则

热门文章

  1. 加速下载ardupilot工程
  2. Android Binder机制(1):Binder架构分析
  3. android8虚拟键布局,Android 虚拟按键在不同版本上的位置问题
  4. 力扣随机数randX——透过现象看本质之二元独立随机分布
  5. Unity 之 代码获取IOS设备型号 -- 做分辨率适配
  6. 概率计算机在线,高斯正态分布(概率)计算公式与在线计算器_三贝计算网_23bei.com...
  7. python之AQI分析与预测
  8. 海德汉 LSV2 协议采集
  9. Mac使用系列之软件安装权限
  10. cad抠图 lisp_用Autolisp对AutoCAD进行二次改造