实战项目——智能农业沙盘

智能农业的实现

前言:前面我们学习了一系列的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/";
 @Override
            public 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、获取开关状态

@Override
            public 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.RoundedImageView
            app: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);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值