一、智能农业总结
做好每个界面的布局,实现页面之间的切换
网络请求,获取信息,并进行解析,获取实时信息,放到页面所属得位置上去
获取各个开关的状态,并且获取沙盘的数据,可以进行控制(操作界面中各个选项,跳转到具体设施操作界面,加载界面时获取服务器中各个设施状态,判断设施状态显示界面中按钮状态)
点击按钮控制,开关图片需要变化,需要用标识位来显示,转到其他页面,也不需要重新更新数据,依然可以获取
注意点:服务器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" //必写,设置为圆/>
- 图片的滑动(viewpager +fragment)
- 具体使用请看我之前的博客(https://blog.csdn.net/xc8899/article/details/79460142);