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

前言:智能农业这个项目可以说是大多都是我们自己完成的。是对于前一个多月Android学习的一个检验,同时也是对我们成绩的一个凭据。意义非常重大。

一、对于布局方面

下面我放两张例图,是我认为在布局上对我有难度的点
这里写图片描述
这里写图片描述
可以看到页面最下方的分别是首页,设置和帮助。而各自的页面上又有各自的内容,所以我们就要用到Fragment和ViewPager现结合,来实现页面的滑动和点击翻页。(由于布局很多,我就挑着些重要的说)
1.首先定义一个Activity类来写页面下方的主页,设置和帮助。这是在三个页面固定不动的。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.myapplication15.classActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/class_viewpager"
        android:layout_width="match_parent"
        android:layout_height="570dp">
    </android.support.v4.view.ViewPager>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/class_viewpager"
        android:orientation="horizontal">

    <LinearLayout
        android:id="@+id/main_ll"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_weight="1">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/b1"
            android:layout_gravity="center"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="首页"
            android:textSize="15sp"
            android:layout_gravity="center"/>
    </LinearLayout>

        <LinearLayout
            android:id="@+id/set_ll"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="1">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/b2"
                android:layout_gravity="center"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="设置"
                android:textSize="15sp"
                android:layout_gravity="center"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/help_ll"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="1">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/b3"
                android:layout_gravity="center"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="帮助"
                android:textSize="15sp"
                android:layout_gravity="center"/>
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

2.接下来就是上面三个Fragment页面用使用Fragment和ViewPager来实现页面的滑动和点击翻页,在这里面我们就是要对布局页面进行填充了。(我用首页来举例)

  1. 在布局文件里对首页的进行代码编程
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.myapplication15.fragment.MainFragment">

    <!-- TODO: Update blank fragment layout -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:gravity="center"
            android:text="智能农业"
            android:textColor="#28c014"
            android:textSize="30sp" />

        <android.support.v4.view.ViewPager
            android:id="@+id/title_pic_viewpager"
            android:layout_width="match_parent"
            android:layout_height="150dp">

        </android.support.v4.view.ViewPager>

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_margin="10dp"
                    android:layout_weight="1">

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

                    <TextView
                        android:id="@+id/top_tv"
                        android:layout_width="60dp"
                        android:layout_height="20dp"
                        android:layout_alignParentTop="true"
                        android:layout_marginTop="20dp"
                        android:layout_toEndOf="@+id/co2_img"
                        android:layout_toRightOf="@+id/co2_img"
                        android:text="CO2浓度"
                        android:textColor="#000000" />

                    <TextView
                        android:id="@+id/co2_tv1"
                        android:layout_width="50dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/co2_img"
                        android:text="CO2:"
                        android:textColor="#000000" />

                    <TextView
                        android:id="@+id/co2_tv"
                        android:layout_width="50dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/co2_tv1"
                        android:text="200"
                        android:textColor="#ff44" />

                    <TextView
                        android:id="@+id/bottom_tv"
                        android:layout_width="50dp"
                        android:layout_height="20dp"
                        android:layout_alignLeft="@id/co2_tv1"
                        android:layout_alignParentBottom="true"
                        android:layout_marginBottom="20dp"
                        android:layout_toRightOf="@id/co2_img"
                        android:gravity="center"
                        android:text="设定值"
                        android:textColor="#44ffff" />

                    <TextView
                        android:layout_width="100dp"
                        android:layout_height="20dp"
                        android:layout_alignParentBottom="true"
                        android:layout_marginBottom="20dp"
                        android:layout_toRightOf="@id/bottom_tv"
                        android:text="500-1000" />

                    <ImageView
                        android:layout_width="80dp"
                        android:layout_height="30dp"
                        android:layout_alignParentRight="true"
                        android:src="@mipmap/p2" />

                    <ImageView
                        android:id="@+id/co2_intent_img"
                        android:layout_width="30dp"
                        android:layout_height="40dp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:src="@mipmap/right" />
                </RelativeLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_margin="10dp"
                    android:layout_weight="1">

                    <com.makeramen.roundedimageview.RoundedImageView
                        android:id="@+id/guangzhao_img"
                        android:layout_width="150dp"
                        android:layout_height="match_parent"
                        android:layout_margin="10dp"
                        android:src="@mipmap/guangzhao"
                        app:riv_oval="true" />

                    <TextView
                        android:id="@+id/top1_tv"
                        android:layout_width="60dp"
                        android:layout_height="20dp"
                        android:layout_alignParentTop="true"
                        android:layout_marginTop="20dp"
                        android:layout_toEndOf="@+id/guangzhao_img"
                        android:layout_toRightOf="@+id/guangzhao_img"
                        android:text="光照强度"
                        android:textColor="#000000" />

                    <TextView
                        android:id="@+id/shine_tv1"
                        android:layout_width="50dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/guangzhao_img"
                        android:text="光照"
                        android:textColor="#000000" />

                    <TextView
                        android:id="@+id/shine_tv"
                        android:layout_width="50dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/shine_tv1"
                        android:text="500"
                        android:textColor="#ff44" />

                    <TextView
                        android:id="@+id/bottom2_tv"
                        android:layout_width="50dp"
                        android:layout_height="20dp"
                        android:layout_alignLeft="@id/shine_tv1"
                        android:layout_alignParentBottom="true"
                        android:layout_marginBottom="20dp"
                        android:layout_toRightOf="@id/guangzhao_img"
                        android:gravity="center"
                        android:text="设定值"
                        android:textColor="#44ffff" />

                    <TextView
                        android:layout_width="100dp"
                        android:layout_height="20dp"
                        android:layout_alignParentBottom="true"
                        android:layout_marginBottom="20dp"
                        android:layout_toRightOf="@id/bottom2_tv"
                        android:text="500-1000" />

                    <ImageView
                        android:layout_width="80dp"
                        android:layout_height="30dp"
                        android:layout_alignParentRight="true"
                        android:src="@mipmap/p2" />

                    <ImageView
                        android:id="@+id/shine_intent_img"
                        android:layout_width="30dp"
                        android:layout_height="40dp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:src="@mipmap/right" />
                </RelativeLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_margin="10dp"
                    android:layout_weight="1">

                    <com.makeramen.roundedimageview.RoundedImageView
                        android:id="@+id/turang_img"
                        android:layout_width="150dp"
                        android:layout_height="match_parent"
                        android:layout_margin="10dp"
                        android:src="@mipmap/turang"
                        app:riv_oval="true" />

                    <TextView
                        android:id="@+id/top_tv3"
                        android:layout_width="60dp"
                        android:layout_height="20dp"
                        android:layout_alignParentTop="true"
                        android:layout_marginTop="20dp"
                        android:layout_toEndOf="@+id/turang_img"
                        android:layout_toRightOf="@+id/turang_img"
                        android:text="土壤指数"
                        android:textColor="#000000" />

                    <TextView
                        android:id="@+id/turangwendu_tv1"
                        android:layout_width="40dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/turang_img"
                        android:text="温度"
                        android:textColor="#000000" />

                    <TextView

                        android:id="@+id/turangwendu_tv"
                        android:layout_width="30dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/turangwendu_tv1"
                        android:text="35"
                        android:textColor="#ff44" />


                    <TextView
                        android:id="@+id/turangshidu_tv1"
                        android:layout_width="40dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/turangwendu_tv"
                        android:text="湿度"
                        android:textColor="#000000" />

                    <TextView
                        android:id="@+id/turangshidu_tv"
                        android:layout_width="30dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/turangshidu_tv1"
                        android:text="32"
                        android:textColor="#ff44" />


                    <TextView
                        android:id="@+id/bottom_tv3"
                        android:layout_width="80dp"
                        android:layout_height="20dp"
                        android:layout_alignLeft="@id/turangwendu_tv1"
                        android:layout_alignParentBottom="true"
                        android:layout_marginBottom="10dp"
                        android:layout_toRightOf="@id/turang_img"
                        android:gravity="center"
                        android:text="湿度设定值"
                        android:textColor="#44ffff" />

                    <TextView
                        android:layout_width="100dp"
                        android:layout_height="20dp"
                        android:layout_alignParentBottom="true"
                        android:layout_marginBottom="10dp"
                        android:layout_toRightOf="@id/bottom_tv3"
                        android:text="0~90" />


                    <ImageView
                        android:layout_width="80dp"
                        android:layout_height="30dp"
                        android:layout_alignParentRight="true"
                        android:src="@mipmap/p2" />

                    <ImageView
                        android:id="@+id/turang_intent_img"
                        android:layout_width="30dp"
                        android:layout_height="40dp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:src="@mipmap/right" />
                </RelativeLayout>


                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_margin="10dp"
                    android:layout_weight="1">

                    <com.makeramen.roundedimageview.RoundedImageView
                        android:id="@+id/kongqi_img"
                        android:layout_width="150dp"
                        android:layout_height="match_parent"
                        android:layout_margin="10dp"
                        android:src="@mipmap/kongqi"
                        app:riv_oval="true" />

                    <TextView
                        android:id="@+id/top_tv4"
                        android:layout_width="60dp"
                        android:layout_height="20dp"
                        android:layout_alignParentTop="true"
                        android:layout_marginTop="20dp"
                        android:layout_toEndOf="@+id/kongqi_img"
                        android:layout_toRightOf="@+id/kongqi_img"
                        android:text="空气指数"
                        android:textColor="#000000" />

                    <TextView
                        android:layout_width="50dp"
                        android:layout_height="20dp"
                        android:layout_marginTop="20dp"
                        android:layout_toRightOf="@id/top_tv4"
                        android:text="PM2.5"
                        android:textColor="#ffc144" />

                    <TextView
                        android:id="@+id/airwendu_tv1"
                        android:layout_width="40dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/kongqi_img"
                        android:text="温度"
                        android:textColor="#000000" />

                    <TextView
                        android:id="@+id/airwendu_tv"
                        android:layout_width="30dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/airwendu_tv1"
                        android:text="35"
                        android:textColor="#ff44" />


                    <TextView
                        android:id="@+id/airshidu_tv1"
                        android:layout_width="40dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/airwendu_tv"
                        android:text="湿度"
                        android:textColor="#000000" />

                    <TextView
                        android:id="@+id/airshidu_tv"
                        android:layout_width="30dp"
                        android:layout_height="20dp"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@id/airshidu_tv1"
                        android:text="32"
                        android:textColor="#ff44" />


                    <TextView
                        android:id="@+id/bottom_tv4"
                        android:layout_width="80dp"
                        android:layout_height="20dp"
                        android:layout_alignLeft="@id/airwendu_tv1"
                        android:layout_alignParentBottom="true"
                        android:layout_marginBottom="10dp"
                        android:layout_toRightOf="@id/kongqi_img"
                        android:gravity="center"
                        android:text="湿度设定值"
                        android:textColor="#44ffff" />

                    <TextView
                        android:layout_width="50dp"
                        android:layout_height="20dp"
                        android:layout_alignParentBottom="true"
                        android:layout_marginBottom="10dp"
                        android:layout_toRightOf="@id/bottom_tv4"
                        android:text="0~90" />


                    <ImageView
                        android:layout_width="80dp"
                        android:layout_height="30dp"
                        android:layout_alignParentRight="true"
                        android:src="@mipmap/p2" />

                    <ImageView
                        android:id="@+id/air_intent_img"
                        android:layout_width="30dp"
                        android:layout_height="40dp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:src="@mipmap/right" />


                </RelativeLayout>
            </LinearLayout>
        </ScrollView>
    </LinearLayout>
</FrameLayout>

注意点:这里的四张图片是圆形的,网上的方法有难的有简单的。我用的是首先在build.gradle(app)里导一个包就是compile 'com.makeramen:roundedimageview:2.2.1'
然后就是我上面代码写的把Image改成RoundedImageView,同时加上app:riv_oval="true"图片就变成圆形了。


  1. 新建一个Fragment类,命名为MainFragment,在里面进行定义,绑定ID等一系列操作
public class MainFragment extends Fragment implements View.OnClickListener {
    private ImageView co2Img;
    private ImageView shineImg;
    private ImageView turangImg;
    private ImageView airImg;

注意点:在首页的最上方有个三张图片的滑动效果,和我上面说的页面滑动是一个意思,用到Fragment和ViewPager。这里我就不多加赘述了


3.其他页面还有很多,我就不都一一详述了。总体概括起来就是设置页面,填充主体类,再进行各个页面之间的点击跳转。

二、控制沙盘和获取沙盘数据

由于我们需要控制和获取沙盘数据,而在这里我们有两个选择,一个是android-async-http和okhttp这两个方法。由于后者速度更迅速,用户可以节省很长时间,所以我们用okhttp。同时还要用到分别的接口文件,这个不用担心,老师会发给你

1.要用okhttp我们首先要在build.gradle(app)里导一个包implementation 'com.squareup.okhttp3:okhttp:3.10.0'然后下载一下。然后新建一个类,在里面来定义sendOkHttpRequest和postJSONByOkhttp两个方法,以便于接下来的使用

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

    public static void sendOkHttpRequest(String url, okhttp3.Callback callback) {
        Request request = new Request.Builder().url(getAbsoluteUrl(url)).build();
        client.newCall(request).enqueue(callback);
    }

    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();
        }   
    }

    private static String getAbsoluteUrl(String relativeUrl) {
        return BASE_URL + relativeUrl;
    }
}

注意点:这里一定都是要导okhttp3下的包,不然会报错


3.接下来就是回到要获取数据的地方,也就是我们的MainFragment。由于使用对象是用户,所以我们要设置一个进度条。来显示进度

 private ProgressDialog progressDialog;
 /**
         * 设置进度条
         */
      progressDialog = new ProgressDialog(getContext());
        progressDialog.setTitle("正在请求数据");
        progressDialog.setMessage("请稍后");
        progressDialog.setCancelable(false);
        progressDialog.show();

4.接着就是在里面调用OkHttp 类里的方法来进行控制和获取

private void getSensorInfoByOkHttp() {
        OkHttp.sendOkHttpRequest("getSensor", new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                progressDialog.dismiss();
                // Toast.makeText(IntelligentActivity.this, "网络连接失败", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                progressDialog.dismiss();
                String result = response.body().string();
                try {
                    JSONObject object = new JSONObject(result);
                    int a1 = object.getInt("co2");
                    int a2 = object.getInt("light");
                    int a3 = object.getInt("soilTemperature");
                    int a4 = object.getInt("soilHumidity");
                    int a5 = object.getInt("airTemperature");
                    int a6 = object.getInt("airHumidity");

                    //更新UI
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            co2TV.setText(a1 + "");
                            shineTV.setText(a2 + "");
                            turangwenduTV.setText(a3 + "");
                            turangshiduTV.setText(a4 + "");
                            airwenduTV.setText(a5 + "");
                            airshiduTV.setText(a6 + "");

                        }
                    });



                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

注意点:由于我们调试代码时,模拟器要和沙盘在同一个局域网里,所以要设置成一样。另外由于有时候会获取不到,所以我们会需要不停的开关,这就是有时候我们代码没错,沙盘却没反应的原因。


大体就是这样了,有些代码在GitHub里能找到,链接源在我上个博客里,希望能对你有所帮助,笔芯!

阅读更多
上一篇关于AsyncHttpClient的学习与使用(智能农业沙盘)
想对作者说点什么? 我来说一句

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

关闭
关闭
关闭