Skip to content

Commit

Permalink
1、实现设备列表的下拉刷新
Browse files Browse the repository at this point in the history
2、实现停止和启动设备与服务器之间的交互
  • Loading branch information
taowenyin committed Aug 2, 2017
1 parent 318c3ff commit f86cc3c
Show file tree
Hide file tree
Showing 8 changed files with 205 additions and 73 deletions.
53 changes: 51 additions & 2 deletions app/src/main/java/cn/edu/siso/rlxapf/DeviceListActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import android.os.Handler;
import android.os.Message;
import android.support.v4.content.SharedPreferencesCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
Expand Down Expand Up @@ -48,18 +49,23 @@ private enum CurrOperate {NO_OPERATE, ENTER_PARAMS, ENTER_REAL_DATA};
private PopupBottomMenu operateMenu = null;
private WindowManager.LayoutParams wLP = null;
private ConnectDialogFragment dialogFragment = null;
private SwipeRefreshLayout swipeRefresh = null;

private Handler httpHandler = null;
private OkHttpClientManager httpManager = null;
private boolean isTimeout = false;

private TcpClientManager tcpClientManager = null;
private Handler tcpHandler = null;

private UserBean userBean = null;

// 当前的操作
private CurrOperate currentOperate = CurrOperate.NO_OPERATE;

private int currentDevicePosition = -1;

public static final String USER_KEY = "user";
public static final String DATA_KEY = "data";
public static final String POSITION_KEY = "position";

Expand All @@ -70,12 +76,13 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_device_list);

UserBean userBean = JSON.parseObject(
userBean = JSON.parseObject(
getIntent().getStringExtra(LoginActivity.USER_DATA_KEY),
UserBean.class);

ImageButton toolbarBack = (ImageButton) findViewById(R.id.toolbar_back);
RecyclerView deviceListView = (RecyclerView) findViewById(R.id.device_list_view);
swipeRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);
dialogFragment = new ConnectDialogFragment(); // 初始化通信对话框对象

deviceData = new ArrayList<DeviceBean>();
Expand Down Expand Up @@ -133,6 +140,16 @@ public void handleMessage(Message msg) {
deviceData.add(devices.get(i));
}
adapter.notifyDataSetChanged();

if (swipeRefresh.isRefreshing()) {

swipeRefresh.post(new Runnable(){
@Override
public void run() {
swipeRefresh.setRefreshing(false);
}
});
}
}
}
};
Expand All @@ -159,6 +176,8 @@ public void handleMessage(Message msg) {
Bundle bundle = new Bundle();
bundle.putString(DATA_KEY, JSON.toJSONString(
deviceData, SerializerFeature.WriteMapNullValue));
bundle.putString(USER_KEY, JSON.toJSONString(
userBean, SerializerFeature.WriteMapNullValue));
bundle.putInt(POSITION_KEY, currentDevicePosition);
intent.putExtras(bundle);

Expand Down Expand Up @@ -295,9 +314,20 @@ public void onClick(View v) {
}
});

swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Log.i(TAG, "onRefresh");
Map<String, String> params = new HashMap<String, String>();
params.put("mobileid", userBean.getMobileId());
params.put("account", userBean.getAccount());
httpManager.httpStrGetAsyn(HTTPConfig.API_URL_QUERY_DEVICE, params, httpHandler);
}
});

// 获取设备列表
RLXApplication application = (RLXApplication) getApplication();
OkHttpClientManager httpManager = application.getHttpManager();
httpManager = application.getHttpManager();
Map<String, String> params = new HashMap<String, String>();
params.put("mobileid", userBean.getMobileId());
params.put("account", userBean.getAccount());
Expand All @@ -318,6 +348,8 @@ public void onItemClick(View view, int position) {
Bundle bundle = new Bundle();
bundle.putString(DATA_KEY, JSON.toJSONString(
deviceData, SerializerFeature.WriteMapNullValue));
bundle.putString(USER_KEY, JSON.toJSONString(
userBean, SerializerFeature.WriteMapNullValue));
bundle.putInt(POSITION_KEY, currentDevicePosition);
intent.putExtras(bundle);
startActivity(intent);
Expand Down Expand Up @@ -345,4 +377,21 @@ public void onOperatorClick(View view, int position) {
Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL,
0, 0);
}

@Override
protected void onResume() {
super.onResume();

swipeRefresh.post(new Runnable() {
@Override
public void run() {
swipeRefresh.setRefreshing(true);

Map<String, String> params = new HashMap<String, String>();
params.put("mobileid", userBean.getMobileId());
params.put("account", userBean.getAccount());
httpManager.httpStrGetAsyn(HTTPConfig.API_URL_QUERY_DEVICE, params, httpHandler);
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ public void onBindViewHolder(final DeviceItemViewHolder holder, final int positi
holder.setDeviceType(data.get(position).getDeviceType());
holder.setGpsNo(data.get(position).getGPSDeviceNo());
holder.setDeviceNo(data.get(position).getDeviceNo());
holder.setDeleted(data.get(position).getDeleted());
// holder.setDeleted(data.get(position).getDeleted());
holder.setDeleted(data.get(position).getOnoff());

if (onItemClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
Expand Down
173 changes: 115 additions & 58 deletions app/src/main/java/cn/edu/siso/rlxapf/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,16 @@
import java.util.Map;

import cn.edu.siso.rlxapf.bean.DeviceBean;
import cn.edu.siso.rlxapf.bean.UserBean;
import cn.edu.siso.rlxapf.config.HTTPConfig;
import cn.edu.siso.rlxapf.config.TCPConfig;
import cn.edu.siso.rlxapf.util.TCPUtil;
import cn.edu.siso.rlxapf.util.http.OkHttpClientManager;
import cn.edu.siso.rlxapf.util.tcp.TcpClientManager;

import static cn.edu.siso.rlxapf.DeviceListActivity.DATA_KEY;
import static cn.edu.siso.rlxapf.DeviceListActivity.POSITION_KEY;
import static cn.edu.siso.rlxapf.DeviceListActivity.USER_KEY;
import static cn.edu.siso.rlxapf.util.tcp.TcpClientManager.KEY_TCP_CMD_TYPE;
import static cn.edu.siso.rlxapf.util.tcp.TcpClientManager.KEY_TCP_OPERATE_TYPE;
import static cn.edu.siso.rlxapf.util.tcp.TcpClientManager.KEY_TCP_RES_TYPE;
Expand All @@ -64,7 +68,11 @@ private enum CurrOperate {NO_OPERATE, STOP_DEVICE, START_DEVICE, ENTER_PARAMS};
private Handler tcpHandler = null;
private boolean isTimeout = false;

private Handler httpHandler = null;
private OkHttpClientManager httpManager = null;

private List<DeviceBean> deviceData = null;
private UserBean userData = null;
private int currPosition = -1;

// 当前的操作
Expand Down Expand Up @@ -103,6 +111,9 @@ protected void onCreate(Bundle savedInstanceState) {
deviceData = JSON.parseArray(
deviceBundle.getString(DATA_KEY),
DeviceBean.class);
userData = JSON.parseObject(
deviceBundle.getString(USER_KEY),
UserBean.class);
currPosition = deviceBundle.getInt(POSITION_KEY);

FragmentTabHost mainTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
Expand All @@ -115,6 +126,42 @@ protected void onCreate(Bundle savedInstanceState) {

dialogFragment = new ConnectDialogFragment(); // 初始化通信对话框对象

httpHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);

Bundle data = msg.getData();
String resultType = data.getString(OkHttpClientManager.HTTP_RESPONSE_TYPE);
String resultData = data.getString(OkHttpClientManager.HTTP_RESPONSE_DATA);

if (currentOperate == CurrOperate.STOP_DEVICE) {
ConnectToast toast = new ConnectToast(getApplicationContext(),
ConnectToast.ConnectRes.SUCCESS,
getResources().getString(R.string.tcp_connect_stop_device_succ),
Toast.LENGTH_SHORT);
toast.show();
}

if (currentOperate == CurrOperate.START_DEVICE) {
Message httpMsg = new Message();
Bundle bundle = new Bundle();

ConnectToast toast = new ConnectToast(getApplicationContext(),
ConnectToast.ConnectRes.SUCCESS,
getResources().getString(R.string.tcp_connect_start_device_succ),
Toast.LENGTH_SHORT);
toast.show();
}

if (dialogFragment != null &&
dialogFragment.getDialog() != null &&
dialogFragment.getDialog().isShowing()) {
dialogFragment.dismiss();
}
}
};

tcpHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Expand All @@ -132,46 +179,47 @@ public void handleMessage(Message msg) {
if (operateType.equals(TcpClientManager.TcpOperateType.OPERATE)) {
int tcpCmdType = Integer.valueOf(data.getString(KEY_TCP_CMD_TYPE));

if (TcpClientManager.TcpCmdType.START_DEVICE.ordinal() == tcpCmdType) {
String resType = data.getString(KEY_TCP_RES_TYPE);
if (resType.equals(TcpClientManager.TcpResType.TIMEOUT)) {
// 标记当前为超时状态
isTimeout = true;

ConnectToast toast = new ConnectToast(getApplicationContext(),
ConnectToast.ConnectRes.BAD,
getResources().getString(R.string.tcp_connect_start_device_time_out),
Toast.LENGTH_LONG);
toast.show();
}
if (!isTimeout) {
ConnectToast toast = new ConnectToast(getApplicationContext(),
ConnectToast.ConnectRes.SUCCESS,
getResources().getString(R.string.tcp_connect_start_device_succ),
Toast.LENGTH_SHORT);
toast.show();
}
}
if (TcpClientManager.TcpCmdType.STOP_DEVICE.ordinal() == tcpCmdType) {
String resType = data.getString(KEY_TCP_RES_TYPE);
if (resType.equals(TcpClientManager.TcpResType.TIMEOUT)) {
// 标记当前为超时状态
isTimeout = true;

ConnectToast toast = new ConnectToast(getApplicationContext(),
ConnectToast.ConnectRes.BAD,
getResources().getString(R.string.tcp_connect_stop_device_time_out),
Toast.LENGTH_LONG);
toast.show();
}
if (!isTimeout) {
ConnectToast toast = new ConnectToast(getApplicationContext(),
ConnectToast.ConnectRes.SUCCESS,
getResources().getString(R.string.tcp_connect_stop_device_succ),
Toast.LENGTH_SHORT);
toast.show();
}
}
// 因为启动停止设备没有回复,所以屏蔽
// if (TcpClientManager.TcpCmdType.START_DEVICE.ordinal() == tcpCmdType) {
// String resType = data.getString(KEY_TCP_RES_TYPE);
// if (resType.equals(TcpClientManager.TcpResType.TIMEOUT)) {
// // 标记当前为超时状态
// isTimeout = true;
//
// ConnectToast toast = new ConnectToast(getApplicationContext(),
// ConnectToast.ConnectRes.BAD,
// getResources().getString(R.string.tcp_connect_start_device_time_out),
// Toast.LENGTH_LONG);
// toast.show();
// }
// if (!isTimeout) {
// ConnectToast toast = new ConnectToast(getApplicationContext(),
// ConnectToast.ConnectRes.SUCCESS,
// getResources().getString(R.string.tcp_connect_start_device_succ),
// Toast.LENGTH_SHORT);
// toast.show();
// }
// }
// if (TcpClientManager.TcpCmdType.STOP_DEVICE.ordinal() == tcpCmdType) {
// String resType = data.getString(KEY_TCP_RES_TYPE);
// if (resType.equals(TcpClientManager.TcpResType.TIMEOUT)) {
// // 标记当前为超时状态
// isTimeout = true;
//
// ConnectToast toast = new ConnectToast(getApplicationContext(),
// ConnectToast.ConnectRes.BAD,
// getResources().getString(R.string.tcp_connect_stop_device_time_out),
// Toast.LENGTH_LONG);
// toast.show();
// }
// if (!isTimeout) {
// ConnectToast toast = new ConnectToast(getApplicationContext(),
// ConnectToast.ConnectRes.SUCCESS,
// getResources().getString(R.string.tcp_connect_stop_device_succ),
// Toast.LENGTH_SHORT);
// toast.show();
// }
// }
}
}
};
Expand All @@ -192,7 +240,6 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
wLP.alpha = 1f;
MainActivity.this.getWindow().setAttributes(wLP);
operateMenu.dismiss();
Message msg = new Message();
Bundle bundle = new Bundle();
switch (position) {
case 0:
Expand All @@ -204,30 +251,34 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
new String[]{deviceData.get(currPosition).getDeviceNo()},
tcpHandler);

// 因为启动和停止设备没有返回值,所以不启动进度框,直接返回正确
bundle.putString(KEY_TCP_OPERATE_TYPE, TcpClientManager.TcpOperateType.OPERATE);
bundle.putString(KEY_TCP_CMD_TYPE, String.valueOf(TcpClientManager.TcpCmdType.STOP_DEVICE.ordinal()));
bundle.putString(KEY_TCP_RES_TYPE, TcpClientManager.TcpResType.SUCCESS);
msg.setData(bundle);
tcpHandler.sendMessage(msg);
// dialogFragment.show(getSupportFragmentManager(), MainActivity.class.getName());
// 发送HTTP关机指令
Map<String, String> offParams = new HashMap<String, String>();
offParams.put("mobileid", userData.getMobileId());
offParams.put("id", deviceData.get(currPosition).getId());
offParams.put("onoff", "0");
httpManager.httpStrGetAsyn(HTTPConfig.API_URL_ON_OFF_DEVICE, offParams, httpHandler);
currentOperate = CurrOperate.STOP_DEVICE;

dialogFragment.show(getSupportFragmentManager(), MainActivity.class.getName());
break;
case 1:
isTimeout = false; // 清空超时,允许进行TCP操作

// 执行停止设备的指令
// 执行启动设备的指令
tcpClientManager.sendCmd(getApplicationContext(),
TcpClientManager.TcpCmdType.START_DEVICE,
new String[]{deviceData.get(currPosition).getDeviceNo()},
tcpHandler);

// 因为启动和停止设备没有返回值,所以不启动进度框,直接返回正确
bundle.putString(KEY_TCP_OPERATE_TYPE, TcpClientManager.TcpOperateType.OPERATE);
bundle.putString(KEY_TCP_CMD_TYPE, String.valueOf(TcpClientManager.TcpCmdType.START_DEVICE.ordinal()));
bundle.putString(KEY_TCP_RES_TYPE, TcpClientManager.TcpResType.SUCCESS);
msg.setData(bundle);
tcpHandler.sendMessage(msg);
// dialogFragment.show(getSupportFragmentManager(), MainActivity.class.getName());
// 发送HTTP停止指令
Map<String, String> onParams = new HashMap<String, String>();
onParams.put("mobileid", userData.getMobileId());
onParams.put("id", deviceData.get(currPosition).getId());
onParams.put("onoff", "1");
httpManager.httpStrGetAsyn(HTTPConfig.API_URL_ON_OFF_DEVICE, onParams, httpHandler);
currentOperate = CurrOperate.START_DEVICE;

dialogFragment.show(getSupportFragmentManager(), MainActivity.class.getName());
break;
case 2:
Intent intent = new Intent(MainActivity.this, ParamActivity.class);
Expand Down Expand Up @@ -298,6 +349,10 @@ public void onClick(View v) {

// 初始化TCP连接对象
tcpClientManager = TcpClientManager.getInstance();

// 初始化HTTP连接对象
RLXApplication application = (RLXApplication) getApplication();
httpManager = application.getHttpManager();
}

@Override
Expand Down Expand Up @@ -352,8 +407,10 @@ public void onFragmentInteraction(Uri uri) {
}
if (uri.getQueryParameter(UriCommunication.Action).equals(UriCommunication.ActionParams.Signal)) {
ApngDrawable signalDrawable = ApngDrawable.getFromView(signalView);
signalDrawable.setNumPlays(1); // Fix number of repetition
signalDrawable.start(); // Start animation
if (signalDrawable != null) {
signalDrawable.setNumPlays(1); // Fix number of repetition
signalDrawable.start(); // Start animation
}
}
}
}
Loading

0 comments on commit f86cc3c

Please sign in to comment.