智能农业的实现
前言:前面我们学习了一系列的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'
- 创建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);