智能农业解析

一、智能农业总结

做好每个界面的布局,实现页面之间的切换
网络请求,获取信息,并进行解析,获取实时信息,放到页面所属得位置上去
获取各个开关的状态,并且获取沙盘的数据,可以进行控制(操作界面中各个选项,跳转到具体设施操作界面,加载界面时获取服务器中各个设施状态,判断设施状态显示界面中按钮状态)
点击按钮控制,开关图片需要变化,需要用标识位来显示,转到其他页面,也不需要重新更新数据,依然可以获取

这里写图片描述

注意点:服务器IP需要设置一下,设置输入正确的,点击按钮,可以跳转到下一页面(IP在服务器上)

//弹出来的对话框
 AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final EditText ipEt = new EditText(this);
        builder.setTitle("欢迎您,请先设置服务器IP");
        builder.setView(ipEt);
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                URL = ipEt.getText().toString();
                Intent intent=new Intent(StartActivity.this,IntelligentActivity.class);
                startActivity(intent);
            }
        });
        builder.show();
//静态变量
 private static final String BASE_URL = "http://"+ StartActivity.URL+":8890/type/jason/action/";

二、公共类与全局变量的使用

该项目需要网络请求很多次,为减轻代码量,可以写一个公共类,在里面写方法,然后进行调用。

使用OkHttp,需要先导依赖包

 compile 'com.squareup.okhttp3:okhttp:3.4.1'

然后创建一个类(类名自定义)

public class OkHttp {
//定义静态url路径
    private static final String BASE_URL = "http://"+ StartActivity.URL+":8890/type/jason/action/";
    private static OkHttpClient client = new OkHttpClient();
    public static final MediaType mediaType = MediaType.parse("application/json;charset=UTF-8");

    public static void sendOkHttpRequest(String url, okhttp3.Callback callback) {
        Request request = new Request.Builder().url(getAbsoluteUrl(url)).build();
        client.newCall(request).enqueue(callback);
    }
//post方法,获取JSON格式的数据
    public static void postJSONByOkhttp(String url, String json,int number, Callback callback) {
        try {
            JSONObject jsonObject=new JSONObject();
            jsonObject.put(json,number);
            RequestBody requestBody = RequestBody.create(mediaType, jsonObject.toString());
            Request request = new Request.Builder().url(getAbsoluteUrl(url)).post(requestBody).build();
            client.newCall(request).enqueue(callback);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    //变换的URL
    private static String getAbsoluteUrl(String relativeUrl) {
        return BASE_URL + relativeUrl;
    }
}

效果图展示:

这里写图片描述


public class CO2Activity extends AppCompatActivity implements View.OnClickListener {

    private ImageButton image1Btn;
    private ImageButton image2Btn;
    //定义点击的次数
    private int anInt1;
    private int anInt2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_co2);
        bindID();
        anInt1 = 0;
        anInt2 = 0;

        //封装获取开关状态的方法
        getStatusByOkhttp();
    }
//获取开关状态
    private void getStatusByOkhttp() {
        OkHttp.sendOkHttpRequest("getContorllerStatus", 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 object = new JSONObject(s);
                    String WaterPump = object.getString("WaterPump");
                    String Blower = object.getString("Blower");
                    String Roadlamp = object.getString("Roadlamp");
                    String Buzzer = object.getString("Buzzer");
                    anInt1 = Integer.parseInt(Blower);
                    anInt2 = Integer.parseInt(Buzzer);
                    //创建一个子线程来判断标识位
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            panduan();
                        }
                    });
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

    }

    private void bindID() {
        image1Btn = findViewById(R.id.activity_co2_image1);
        image2Btn = findViewById(R.id.activity_co2_image2);
        image1Btn.setOnClickListener(this);
        image2Btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.activity_co2_image1:
                anInt1++;
                panduan();
                open("Blower", anInt1 % 2);
                break;
            case R.id.activity_co2_image2:
                anInt2++;
                panduan();
                open("Buzzer", anInt2 % 2);
                break;
        }

    }
//根据点击的次数,来判断使用开的图片还是关的图片
    public void panduan() {
        if (anInt1 % 2 == 0) {
            image1Btn.setBackgroundResource(R.mipmap.dakaifengshan);
        } else {
            image1Btn.setBackgroundResource(R.mipmap.dakaifengshan2);
        }
        if (anInt2 % 2 == 0) {
            image2Btn.setBackgroundResource(R.mipmap.dakaibaojing);
        } else {
            image2Btn.setBackgroundResource(R.mipmap.dakaibaojing2);
        }
    }
//对开关进行控制:可以开、可以关
    public void open(String string, int a) {
        OkHttp.postJSONByOkhttp("control",string,a, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

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

            }
        });
    }
}

三、小知识点

将图片变成圆形
1、在build.gradle中导入包compile 'com.makeramen:roundedimageview:2.2.1'
2、然后在布局文件中写入以下代码<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/agriculture_image"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_margin="10dp"
android:src="@mipmap/co2"
app:riv_oval="true" //必写,设置为圆/>

  1. 图片的滑动(viewpager +fragment)
  2. 具体使用请看我之前的博客(https://blog.csdn.net/xc8899/article/details/79460142);
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页