From f86cc3cfccfc705e7f6aca802bf156efe3cfdd5b Mon Sep 17 00:00:00 2001 From: taowenyin Date: Wed, 2 Aug 2017 16:16:36 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=AE=9E=E7=8E=B0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E7=9A=84=E4=B8=8B=E6=8B=89=E5=88=B7=E6=96=B0?= =?UTF-8?q?=202=E3=80=81=E5=AE=9E=E7=8E=B0=E5=81=9C=E6=AD=A2=E5=92=8C?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E8=AE=BE=E5=A4=87=E4=B8=8E=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E4=B9=8B=E9=97=B4=E7=9A=84=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../edu/siso/rlxapf/DeviceListActivity.java | 53 +++++- .../rlxapf/DeviceListRecyclerAdapter.java | 3 +- .../java/cn/edu/siso/rlxapf/MainActivity.java | 173 ++++++++++++------ .../cn/edu/siso/rlxapf/bean/DeviceBean.java | 9 + .../cn/edu/siso/rlxapf/config/HTTPConfig.java | 5 + .../data/viewholder/DeviceItemViewHolder.java | 10 +- .../main/res/layout/activity_device_list.xml | 23 ++- app/src/main/res/values/strings.xml | 2 + 8 files changed, 205 insertions(+), 73 deletions(-) diff --git a/app/src/main/java/cn/edu/siso/rlxapf/DeviceListActivity.java b/app/src/main/java/cn/edu/siso/rlxapf/DeviceListActivity.java index 20d5fb0..01bf03b 100644 --- a/app/src/main/java/cn/edu/siso/rlxapf/DeviceListActivity.java +++ b/app/src/main/java/cn/edu/siso/rlxapf/DeviceListActivity.java @@ -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; @@ -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"; @@ -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(); @@ -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); + } + }); + } } } }; @@ -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); @@ -295,9 +314,20 @@ public void onClick(View v) { } }); + swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + Log.i(TAG, "onRefresh"); + Map params = new HashMap(); + 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 params = new HashMap(); params.put("mobileid", userBean.getMobileId()); params.put("account", userBean.getAccount()); @@ -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); @@ -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 params = new HashMap(); + params.put("mobileid", userBean.getMobileId()); + params.put("account", userBean.getAccount()); + httpManager.httpStrGetAsyn(HTTPConfig.API_URL_QUERY_DEVICE, params, httpHandler); + } + }); + } } diff --git a/app/src/main/java/cn/edu/siso/rlxapf/DeviceListRecyclerAdapter.java b/app/src/main/java/cn/edu/siso/rlxapf/DeviceListRecyclerAdapter.java index 113448c..c9fdcc0 100644 --- a/app/src/main/java/cn/edu/siso/rlxapf/DeviceListRecyclerAdapter.java +++ b/app/src/main/java/cn/edu/siso/rlxapf/DeviceListRecyclerAdapter.java @@ -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() { diff --git a/app/src/main/java/cn/edu/siso/rlxapf/MainActivity.java b/app/src/main/java/cn/edu/siso/rlxapf/MainActivity.java index 2566a34..0957459 100644 --- a/app/src/main/java/cn/edu/siso/rlxapf/MainActivity.java +++ b/app/src/main/java/cn/edu/siso/rlxapf/MainActivity.java @@ -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; @@ -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 deviceData = null; + private UserBean userData = null; private int currPosition = -1; // 当前的操作 @@ -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); @@ -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) { @@ -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(); +// } +// } } } }; @@ -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: @@ -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 offParams = new HashMap(); + 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 onParams = new HashMap(); + 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); @@ -298,6 +349,10 @@ public void onClick(View v) { // 初始化TCP连接对象 tcpClientManager = TcpClientManager.getInstance(); + + // 初始化HTTP连接对象 + RLXApplication application = (RLXApplication) getApplication(); + httpManager = application.getHttpManager(); } @Override @@ -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 + } } } } \ No newline at end of file diff --git a/app/src/main/java/cn/edu/siso/rlxapf/bean/DeviceBean.java b/app/src/main/java/cn/edu/siso/rlxapf/bean/DeviceBean.java index a7154f0..3be8e45 100644 --- a/app/src/main/java/cn/edu/siso/rlxapf/bean/DeviceBean.java +++ b/app/src/main/java/cn/edu/siso/rlxapf/bean/DeviceBean.java @@ -12,6 +12,7 @@ public class DeviceBean { private String GPRSMobileNo = null; private String deviceNo = null; private String authority = null; + private String onoff = null; private String deleted = null; public String getId() { @@ -102,6 +103,14 @@ public void setAuthority(String authority) { this.authority = authority; } + public String getOnoff() { + return onoff; + } + + public void setOnoff(String onoff) { + this.onoff = onoff; + } + public String getDeleted() { return deleted; } diff --git a/app/src/main/java/cn/edu/siso/rlxapf/config/HTTPConfig.java b/app/src/main/java/cn/edu/siso/rlxapf/config/HTTPConfig.java index bd21293..7615cc4 100644 --- a/app/src/main/java/cn/edu/siso/rlxapf/config/HTTPConfig.java +++ b/app/src/main/java/cn/edu/siso/rlxapf/config/HTTPConfig.java @@ -54,4 +54,9 @@ public class DeviceListError { */ public static final String API_URL_QUERY_DEVICE = "JasonQueryDevice.aspx"; + /** + * 开关设备 + */ + public static final String API_URL_ON_OFF_DEVICE = "JasonSetDevice.aspx"; + } diff --git a/app/src/main/java/cn/edu/siso/rlxapf/data/viewholder/DeviceItemViewHolder.java b/app/src/main/java/cn/edu/siso/rlxapf/data/viewholder/DeviceItemViewHolder.java index 014c59f..4d28f6e 100644 --- a/app/src/main/java/cn/edu/siso/rlxapf/data/viewholder/DeviceItemViewHolder.java +++ b/app/src/main/java/cn/edu/siso/rlxapf/data/viewholder/DeviceItemViewHolder.java @@ -80,11 +80,13 @@ public void setDeviceNo(String deviceNo) { public void setDeleted(String deleted) { if (Integer.parseInt(deleted) == 0) { - this.deleted.setTextColor(Color.GREEN); - this.deleted.setText(context.getResources().getString(R.string.device_delete_0)); - } else { this.deleted.setTextColor(Color.RED); - this.deleted.setText(context.getResources().getString(R.string.device_delete_1)); +// this.deleted.setText(context.getResources().getString(R.string.device_delete_0)); + this.deleted.setText(context.getResources().getString(R.string.device_onoff_0)); + } else { + this.deleted.setTextColor(Color.GREEN); +// this.deleted.setText(context.getResources().getString(R.string.device_delete_1)); + this.deleted.setText(context.getResources().getString(R.string.device_onoff_1)); } } diff --git a/app/src/main/res/layout/activity_device_list.xml b/app/src/main/res/layout/activity_device_list.xml index 39210df..67a2906 100644 --- a/app/src/main/res/layout/activity_device_list.xml +++ b/app/src/main/res/layout/activity_device_list.xml @@ -47,17 +47,24 @@ - + android:layout_height="match_parent"> - + android:layout_height="match_parent" + android:orientation="vertical" + android:background="@color/app_bg"> - + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 58d9c46..af7f796 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -38,6 +38,8 @@ 设备编号: 正常 已删除 + 停止中 + 启动中 mobileid没有设置