智能农业项目的感悟

智能农业项目的感悟:

写智能农业项目需要智能农业App素材,接口,项目需求说明书。

准备工作:

1,把项目的xml页面做好。
2,在build.gradle中把依赖库加入android-async-http或okhttp,asynchttpclient自带线程而okhttp没有每次耗时操作都需要创建子线程(使用okhttp可以更快)
dependencies {
    compile 'com.loopj.android:android-async-http:1.4.9'
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
}
3,加入联网联网权限
<uses-permission android:name="android.permission.INTERNET" />

几个界面的实现:

  • 界面一

这里写图片描述

使用AlertDialog进行设置将EditText加入

 private void modify() {
        final EditText editText = new EditText(this);
        android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(this);
        builder.setTitle("欢迎您,请先设置服务器IP");
        builder.setView(editText);
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                string=editText.getText().toString();
                Intent intent = new Intent(StartActivity.this, MainActivity.class);
                startActivity(intent);
            }
        });
        builder.show();
    }
  • 界面二

这里写图片描述

底部菜单栏的设置

package com.example.intellsigentagriculture;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private ViewPager viewPager;
    private ShouFragment shouFragment;//菜单栏对应三个Fragment
    private SetFragment setFragment;
    private HelpFragment helpFragment;
    private LinearLayout imageButton;//三个LinearLayout的点击事件
    private LinearLayout imageButton2;
    private LinearLayout imageButton3;
    private ImageView img1;//菜单栏上的三个图片
    private ImageView img2;
    private ImageView img3;
    private TextView title;
    private TextView textView;//菜单栏上的三个文字
    private TextView textView2;
    private TextView textView3;

    private ArrayList<Fragment> fragmentArrayList = new ArrayList<>();//Fragment的列

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = findViewById(R.id.viewpager);//viewPager绑定ID
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            //对viewPager进行监听
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {//在监听事件中查看当前选择的页面
                if (position == 0) {
                    //当position=0的时候跳到第一个界面的图片和文字
                    one();
                } else if (position == 1) {
                    //第二个界面
                    two();
                } else if (position == 2) {
                    //第三个界面
                    three();
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        imageButton = findViewById(R.id.btn1);//绑定ID
        imageButton2 = findViewById(R.id.btn2);
        imageButton3 = findViewById(R.id.btn3);
        img1 = findViewById(R.id.home);
        img2 = findViewById(R.id.seting);
        img3 = findViewById(R.id.help);
        title = findViewById(R.id.title);
        textView = findViewById(R.id.hometext);
        textView2 = findViewById(R.id.settext);
        textView3 = findViewById(R.id.helptext);
        imageButton.setOnClickListener(this);
        imageButton2.setOnClickListener(this);
        imageButton3.setOnClickListener(this);
        shouFragment = new ShouFragment();
        setFragment = new SetFragment();
        helpFragment = new HelpFragment();
        fragmentArrayList.add(shouFragment);
        fragmentArrayList.add(setFragment);
        fragmentArrayList.add(helpFragment);

        Asadapter asadapter = new Asadapter(getSupportFragmentManager(), fragmentArrayList);
        //绑定适配器
        viewPager.setAdapter(asadapter);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1://监听第一个LinearLayout
                viewPager.setCurrentItem(0);//viewPager到到第一个界面
                one();//图片和文字变色
                break;
            case R.id.btn2:
                viewPager.setCurrentItem(1);
                two();
                break;
            case R.id.btn3:
                viewPager.setCurrentItem(2);
                three();
                break;
        }
    }

    private void three() {
        title.setText("帮助");
        img1.setImageResource(R.mipmap.b1);
        textView.setTextColor(this.getResources().getColor(R.color.colorblack));

        img2.setImageResource(R.mipmap.b2);
        textView2.setTextColor(this.getResources().getColor(R.color.colorblack));

        img3.setImageResource(R.mipmap.bangzhu_lu);
        textView3.setTextColor(this.getResources().getColor(R.color.colormenc));
    }

    private void two() {
        title.setText("设置");
        img1.setImageResource(R.mipmap.b1);
        textView.setTextColor(this.getResources().getColor(R.color.colorblack));

        img2.setImageResource(R.mipmap.shezhi_lu);
        textView2.setTextColor(this.getResources().getColor(R.color.colormenc));

        img3.setImageResource(R.mipmap.b3);
        textView3.setTextColor(this.getResources().getColor(R.color.colorblack));
    }

    private void one() {
        title.setText("智能农业");
        img1.setImageResource(R.mipmap.shouye_lu);
        textView.setTextColor(this.getResources().getColor(R.color.colormenc));

        img2.setImageResource(R.mipmap.b2);
        textView2.setTextColor(this.getResources().getColor(R.color.colorblack));

        img3.setImageResource(R.mipmap.b3);
        textView3.setTextColor(this.getResources().getColor(R.color.colorblack));
    }

    private class Asadapter extends FragmentPagerAdapter {
        private List<Fragment> fragmentList;

        public Asadapter(FragmentManager fm, List<Fragment> fragmentList) {
            super(fm);
            this.fragmentList = fragmentList;
        }

        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }

        @Override
        public int getCount() {
            return fragmentList.size();
        }
    }
}

Fragment的图片滑动

使用ViewPager+Fragment解决

        fragmentA = new FragmentA();//新建Fragment
        fragmentB = new FragmentB();
        fragmentC = new FragmentC();

        fragmentArrayList.clear();每次刷新一下

        fragmentArrayList.add(fragmentA);//把fragment加入进来
        fragmentArrayList.add(fragmentB);
        fragmentArrayList.add(fragmentC);

        Newadapter asadapter = new Newadapter(getFragmentManager(), fragmentArrayList);
        //绑定适配器
        //需要注意的是这里第一个参数变成了getFragmentManager(),而不是getSupportFragmentManager()
        viewPager.setAdapter(asadapter);

圆形图片的实现

在dependencies 添加依赖库

dependencies {
  compile 'com.makeramen:roundedimageview:2.2.1'
}

在xml中就可以实现圆形图片了

<com.makeramen.roundedimageview.RoundedImageView
                    android:id="@+id/mimmap1"
                    android:layout_width="120dp"
                    android:layout_height="120dp"
                    android:layout_margin="10dp"
                    android:src="@drawable/co2"
                    app:riv_oval="true" />

co2浓度的获取

使用Okhttp获取co2浓度,以及开始界面EditText输入的IP的API的拼接,还有阈值传的值的接收

package com.example.intellsigentagriculture.use;

import android.util.Log;

import com.example.intellsigentagriculture.StartActivity;

import org.json.JSONException;
import org.json.JSONObject;

import java.net.URL;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

/**
 * Created by wang3 on 2018/4/12.
 */

public class OkHttp {
    private static final String HTTP="http://";
    private static final String HTTP2= ":8890/type/jason/action/";
    //API的拼接
    private static  OkHttpClient okHttpClient=new OkHttpClient();
    public static final MediaType Json=MediaType.parse("application/json;charset=UTF-8");

    public static void get(String url, Callback callback){
        //使用Callback回调方法
        Request request = new Request.Builder().url(getaddress(url)).build();
        // 创建一个request对象
        Call call= okHttpClient.newCall(request);
        call.enqueue(callback);
    }
    public static void post(String url,String json,int number, Callback callback){
        try {
            JSONObject jsonObject=new JSONObject();
            jsonObject.put(json,number);//传JSON数据(键值对)
            RequestBody requestBody=RequestBody.create(Json,jsonObject.toString());
            Request request = new Request.Builder().url(getaddress(url)).post(requestBody).build();
            okHttpClient.newCall(request).enqueue(callback);
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
    public static void logs(String url,String json,String number, Callback callback){
        try {//从阈值改变设置值
            JSONObject jsonObject=new JSONObject();
            jsonObject.put(json,number);
            RequestBody requestBody=RequestBody.create(Json,jsonObject.toString());
            Request request = new Request.Builder().url(getaddress(url)).post(requestBody).build();
            okHttpClient.newCall(request).enqueue(callback);
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

    private static String getaddress(String url) {
        return HTTP+ StartActivity.string+HTTP2+url;
    }
}

开始获取co2的值

OkHttp.get("getSensor", new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                progressDialog.dismiss();
                Toast.makeText(getContext(), "访问失败", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String s = response.body().string();
                //以字符串的形式接收JSON数据
                try {
                    JSONObject jsonObject = new JSONObject(s);//解析JSON
                    airHumidity = jsonObject.getString("airHumidity");
                    airTemperature = jsonObject.getString("airTemperature");
                    soilTemperature = jsonObject.getString("soilTemperature");
                    co2 = jsonObject.getString("co2");
                    soilHumidity = jsonObject.getString("soilHumidity");
                    light = jsonObject.getString("light");
                    getActivity().runOnUiThread(new Runnable() {//创建线程(耗时)
                        @Override
                        public void run() {//
                            progressDialog.dismiss();
                            textView.setText(co2);
                            textView2.setText(light);
                            textView3.setText(soilTemperature);
                            textView4.setText(soilHumidity);
                            textView5.setText(airHumidity);
                            textView6.setText(airTemperature);
                        }
                    });
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

设置值的获取

OkHttp.get("getConfig", new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                progressDialog.dismiss();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                progressDialog.dismiss();
                String m = response.body().string();
                try {
                    JSONObject jsonObject = new JSONObject(m);//JSON的解析
                    minCo2 = jsonObject.getString("minCo2");//设置值的最小值与最大值
                    maxCo2 = jsonObject.getString("maxCo2");
                    minLight = jsonObject.getString("minLight");
                    maxLight = jsonObject.getString("maxLight");
                    minSoilHumidity = jsonObject.getString("minSoilHumidity");
                    maxSoilHumidity = jsonObject.getString("maxSoilHumidity");
                    minAirHumidity = jsonObject.getString("minAirHumidity");
                    maxAirHumidity = jsonObject.getString("maxAirHumidity");

                    getActivity().runOnUiThread(new Runnable() {//创建线程
                        @Override
                        public void run() {
                            progressDialog.dismiss();
                            numbercount.setText(minCo2);
                            numbercounttwo.setText(maxCo2);
                            numbercount2.setText(minLight);
                            numbercount2two.setText(maxLight);
                            numbercount3.setText(minSoilHumidity);
                            numbercount3two.setText(maxSoilHumidity);
                            numbercount4.setText(minAirHumidity);
                            numbercount4two.setText(maxAirHumidity);
                        }
                    });
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
  • 界面三
    这里写图片描述

    判断图片是打开还是关闭

点击事件实现计算第几次

 public void onClick(View v) {
 //点击事件中将判断语句加入
        switch (v.getId()) {
            case R.id.imageView:
                anInt++;//每次加一
                panduan();//跳到panduan方法中
                kaishi("Blower", anInt % 2);//将值传入到获取控制器状态的协议中
                break;

        }

    }

判断图片打开还是关闭

private void panduan() {//判断点击的值
        if (anInt % 2 == 0) {//为0时是打开1是关闭
            imageButton.setBackgroundResource(R.drawable.dakaifengshan);
        } else {
            imageButton.setBackgroundResource(R.drawable.dakaifengshan2);
        }

    }

获取控制器协议

  public void kaishi(String string, int a) {
        OkHttp.post("control", string, a, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Toast.makeText(Co2Activity.this, "连接失败", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                String s = response.body().string();
                try {
                    JSONObject jsonObject = new JSONObject(s);
                    String Blower = jsonObject.getString("Blower");
                    String WaterPump = jsonObject.getString("WaterPump");

                    anInt = Integer.parseInt(Blower);
                    anInt2 = Integer.parseInt(WaterPump);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            panduan();
                        }
                    });
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
    }
  • 界面四

    这里写图片描述

点击确定按钮实现界面二中设置值的改变

package com.example.intellsigentagriculture;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.example.intellsigentagriculture.use.OkHttp;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class Co2SetingActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn;
    private EditText edi1;
    private EditText edi2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_co2_seting);
        bindID();
    }

    private void bindID() {
        btn=findViewById(R.id.co2_wl3);//绑定ID
        edi1=findViewById(R.id.editText);
        edi2=findViewById(R.id.editText2);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.co2_wl3://点击确定时传值
                Toast.makeText(this, "设置成功", Toast.LENGTH_SHORT).show();
                String co2min=edi1.getText().toString();
                String co2max=edi2.getText().toString();
                co2min("minCo2",co2min);//创建方法放入“接口的值”,换成输入的值
                co2min("maxCo2",co2max);

                break;
        }

    }


    private void co2min(String co2min, String co2min1) {
        OkHttp.logs("setConfig", co2min, co2min1, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
            }
        });
    }
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值