6 | 控制插座(请在登录后使用) |
---|---|
名称 | ABRet sockCtrl(String soDevName, String status) |
参数 | soDevName: 插座名称、status:插座状态(0:关闭 1:打开) |
返回值 | ABRet: code String 处理结果(00000成功,00000以外失败)、msg |
public class SocketActivity extends AppCompatActivity {
private TextView textViewSocket_St; // 显示插座当前状态
private String SocketStatus; // 插座当前状态
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_socket);
findView();
}
private void findView() {
textViewSocket_St = (TextView) findViewById(R.id.textViewSocket_St);
}
public void onClickSocket(View view) {
SocketStatusTask socketStatusTask = new SocketStatusTask();
socketStatusTask.execute();
}
// 1.获取插座的控制权限(已经完成)
class SocketStatusTask extends AsyncTask<Void, Void, ABRet> {
@Override
protected ABRet doInBackground(Void... Voids) {
ABRet abRet = ABSDK.getInstance().getSockStatus("s1");
return abRet;
}
@Override
protected void onPostExecute(ABRet abRet) {
super.onPostExecute(abRet);
if (abRet.getCode().equals("00000")) {
Toast.makeText(SocketActivity.this, "插座权限获取成功", Toast.LENGTH_SHORT).show();
// 2.获取插座当前的“开-关”状态
SocketStatus = abRet.getDicDatas().get("status").toString();
textViewSocket_St.setText(SocketStatus);
// 6.实例化
ConrolSocketStatusTask conrolSocketStatusTask = new ConrolSocketStatusTask(SocketStatus);
// 7.执行!!!
conrolSocketStatusTask.execute();
} else {
Toast.makeText(SocketActivity.this, "插座权限获取失败" + abRet.getCode(),
Toast.LENGTH_SHORT).show();
}
}
}
// 3.新创建一个类ConrolSocketStatusTask,继承AsyncTask
class ConrolSocketStatusTask extends AsyncTask<String, Void, ABRet> {
private String SocketStatus1;
public ConrolSocketStatusTask(String SocketStatus) {
SocketStatus1 = SocketStatus;
}
// 4.重写doInBackground()、onPostExecute()方法
@Override
protected ABRet doInBackground(String... Voids) {
// 5.将得到的状态对立的状态,传入sockCtrl()方法
if (SocketStatus1.equals("0")) {
SocketStatus1 = "1";
} else {
SocketStatus1 = "0";
}
ABRet abRet = ABSDK.getInstance().sockCtrl("s1", SocketStatus1);
return abRet;
}
@Override
protected void onPostExecute(ABRet abRet) {
super.onPostExecute(abRet);
if (abRet.getCode().equals("00000")) {
Toast.makeText(SocketActivity.this, "插座状态“更改”为:" + SocketStatus1, Toast.LENGTH_SHORT).show();
textViewSocket_St.setText(SocketStatus1);
} else {
Toast.makeText(SocketActivity.this, "插座状态“更改”失败!!!!" + abRet.getCode(), Toast.LENGTH_SHORT).show();
}
}
}
}
出现这个问题的原因很大的可能性,是因为你将后台程序写在了前端(例:将本应该在doInBackground()中的程序错写在onPostExecute()中),使前端程序已经开始运行显示了,后台数据还没刷新完,导致请求超时!
【ps】由于温湿度、门禁、插座编写思路类似,下面只提供程序流程图,不再作过多的解释说明。
14 | 取得温湿度情报(请在登录后使用) |
---|---|
名称 | ABRet getThStatus(String thDevName) |
参数 | thDevName: 温湿度名称 |
返回值 | ABRet: code String、dicdatas Map:"temperature" String -温度, "humidity" String -湿度 |
public class TempAndHumidityActivity extends AppCompatActivity {
private TextView textViewTemp;
private TextView textViewHumidity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp_and_humidity);
findView();
THStatusTask thStatusTask = new THStatusTask();
thStatusTask.execute();
}
private void findView(){
textViewTemp = (TextView) findViewById(R.id.textViewTemp);
textViewHumidity = (TextView) findViewById(R.id.textViewHumidity);
}
class THStatusTask extends AsyncTask<Void, Void, ABRet> {
@Override
protected ABRet doInBackground(Void... Voids) {
ABRet abRet = ABSDK.getInstance().getThStatus("TH1");
return abRet;
}
@Override
protected void onPostExecute(ABRet abRet) {
super.onPostExecute(abRet);
if (abRet.getCode().equals("00000")){
Toast.makeText(TempAndHumidityActivity.this,"温湿度获取成功",Toast.LENGTH_SHORT).show();
String temp = abRet.getDicDatas().get("temperature").toString();
String humidity = abRet.getDicDatas().get("humidity").toString();
textViewTemp.setText(temp);
textViewHumidity.setText(humidity);
}else{
Toast.makeText(TempAndHumidityActivity.this,"温湿度获取失败"+abRet.getCode(),Toast.LENGTH_SHORT).show();
}
}
}
}
13 | 取得门磁状态(请在登录后使用) |
---|---|
名称 | ABRet getDoorStatus(String doorDevName) |
参数 | doorDevName: 门磁名称 |
返回值 | ABRet: code String、dicdatas Map:status String 门磁状态(0:关闭 1:开启) |
public class DoorActivity extends AppCompatActivity {
private TextView textViewDoor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_door);
findView();
}
private void findView() {
textViewDoor = (TextView) findViewById(R.id.textViewDoor);
DoorStatusTask doorStatusTask = new DoorStatusTask();
doorStatusTask.execute();
}
class DoorStatusTask extends AsyncTask<Void, Void, ABRet> {
@Override
protected ABRet doInBackground(Void... Voids) {
ABRet abRet = ABSDK.getInstance().getDoorStatus("door");
return abRet;
}
@Override
protected void onPostExecute(ABRet abRet) {
super.onPostExecute(abRet);
if (abRet.getCode().equals("00000")){
String door_status = abRet.getDicDatas().get("status").toString();
textViewDoor.setText(door_status);
Toast.makeText(DoorActivity.this,"门禁状态获取成功", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(DoorActivity.this,"门禁状态获取失败" + abRet.getCode(),
Toast.LENGTH_SHORT).show();
}
}
}
}
【ps】我们现在设计的页面和编写的后台都是测试版本,考虑的问题比较少,只是为了看现象十分简单,等到后期设计的时候,我们会考虑到各种各样的问题以及UI设计的合理性等等。
评论