EspressifApp / IOT-Espressif-Android

Other
228 stars 137 forks source link

Plug Issues #2

Closed ghzjtian closed 7 years ago

ghzjtian commented 7 years ago

1.如果换了网络,如wifi从 aaa(Internet,我手机分享的wifi)换到bbb(local,plug 连接的路由器wifi),发现会有异常java.net.UnknownHostException

2.从 DeviceActivityAbs 进入 DevicePlugActivity时,获取状态 doActionGetDeviceStatus,但解析返回的 Json时有 org.json.JSONException

afunx commented 7 years ago
  1. 换了网络之后,有没有做过下拉刷新的动作呢?如果没有下拉刷新的话,仍然会走网络的通道。下一版Android代码重构时,我们会考虑到这个问题的,谢谢你的反馈。给你一个临时补救的建议:监测到Wi-Fi切换的广播后,主动刷新一下。
  2. 需要结合Device返回的数据进行分析,可能是Device返回的数据与之前的约定不符。可以看看Device的打印,或者看看android端收到的原始数据是怎样的。
ghzjtian commented 7 years ago

谢谢解答! 2.我发现Plug 中的 Internet 的 post 和 get Status 的 Json都很正常,Local 的 post status 返回的Json解析 也正常,但就是 Local 的 get Status 返回 的Json解析出错,

错误: 11-02 15:07:40.081: D/com.espressif.iot.ui.device.DeviceActivityAbs(8014): ESP_CE24BA-----------> Get status 11-02 15:07:40.081: D/com.espressif.iot.base.net.rest2.EspHttpUtil(8014): Thread[AsyncTask #1,5,main]##curl -X GET http://192.168.0.10/config?command=switch 11-02 15:07:40.240: I/com.espressif.iot.base.net.rest2.EspHttpUtil(8014): !TextUtils.isEmpty(resultStr) ------------> 11-02 15:07:40.240: I/com.espressif.iot.base.net.rest2.EspHttpUtil(8014): executeHttpRequest result str = { 11-02 15:07:40.240: I/com.espressif.iot.base.net.rest2.EspHttpUtil(8014): "response": { 11-02 15:07:40.240: I/com.espressif.iot.base.net.rest2.EspHttpUtil(8014): "status": 1 11-02 15:07:40.240: I/com.espressif.iot.base.net.rest2.EspHttpUtil(8014): } 11-02 15:07:40.240: I/com.espressif.iot.base.net.rest2.EspHttpUtil(8014): } 11-02 15:07:40.240: D/com.espressif.iot.base.net.rest2.EspHttpUtil(8014): Thread[AsyncTask #1,5,main]##curl -X GET http://192.168.0.10/config?command=switch:result={"response":{"status":1},"status":200} 11-02 15:07:40.241: W/System.err(8014): org.json.JSONException: No value for Response 11-02 15:07:40.241: W/System.err(8014): at org.json.JSONObject.get(JSONObject.java:389) 11-02 15:07:40.241: W/System.err(8014): at org.json.JSONObject.getJSONObject(JSONObject.java:609) 11-02 15:07:40.241: W/System.err(8014): at com.espressif.iot.command.device.plug.EspCommandPlugGetStatusLocal.getCurrentPlugStatus2(EspCommandPlugGetStatusLocal.java:43) 11-02 15:07:40.241: W/System.err(8014): at com.espressif.iot.command.device.plug.EspCommandPlugGetStatusLocal.doCommandPlugGetStatusLocal(EspCommandPlugGetStatusLocal.java:68) 11-02 15:07:40.241: W/System.err(8014): at com.espressif.iot.action.device.common.EspActionDeviceGetStatusLocal.executeGetPlugStatusLocal(EspActionDeviceGetStatusLocal.java:110) 11-02 15:07:40.241: W/System.err(8014): at com.espressif.iot.action.device.common.EspActionDeviceGetStatusLocal.doActionDeviceGetStatusLocal(EspActionDeviceGetStatusLocal.java:46) 11-02 15:07:40.241: W/System.err(8014): at com.espressif.iot.model.user.EspUser.doActionGetDeviceStatus(EspUser.java:510) 11-02 15:07:40.241: W/System.err(8014): at com.espressif.iot.ui.device.DeviceActivityAbs$DeviceTask.doInBackground(DeviceActivityAbs.java:662) 11-02 15:07:40.241: W/System.err(8014): at com.espressif.iot.ui.device.DeviceActivityAbs$DeviceTask.doInBackground(DeviceActivityAbs.java:1) 11-02 15:07:40.241: W/System.err(8014): at android.os.AsyncTask$2.call(AsyncTask.java:295) 11-02 15:07:40.241: W/System.err(8014): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 11-02 15:07:40.241: W/System.err(8014): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 11-02 15:07:40.241: W/System.err(8014): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 11-02 15:07:40.241: W/System.err(8014): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 11-02 15:07:40.242: W/System.err(8014): at java.lang.Thread.run(Thread.java:818) 11-02 15:07:40.245: D/com.espressif.iot.command.device.plug.EspCommandPlugGetStatusLocal(8014): Thread[AsyncTask #1,5,main]##doCommandPlugGetStatusLocal(inetAddress=[/192.168.0.10],deviceBssid=[18:fe:34:ce:24:ba],isMeshDevice=[false]) 11-02 15:07:40.245: D/com.espressif.iot.ui.device.DeviceActivityAbs(8014): DeviceTask result = false

afunx commented 7 years ago

"response"这里和约定的不同。之前,这里都使用的是"Response"。Device app开发团队误改为"response"了,你可以做一个优化,检查一下。我们马上会做这个兼容,今天下班前,就在github上更新。

ghzjtian commented 7 years ago

感谢你的回答! 还有几点困惑的地方,请问有没有 qq群之类的APP反馈或讨论的渠道? 我只知道你们有http://bbs.espressif.com/和http://www.esp8266.com/ 论坛

afunx commented 7 years ago

github反应会比较快。github由开发人员维护,bbs或论坛反应的话,会有相关人员指派给我们。暂时没有这样的qq群。

ghzjtian commented 7 years ago

好的,谢谢!

我还有一些想了解的事情: 1.app 打开并登录后,是否与服务器保持有长连接?或者只是每次都是app发送了请求,服务器再返回status ?(我发现当我手动按停了plug的开关后,app的PLUG状态不会有反应,即使我打开设置中的‘接收推送消息选项’)

请问app有没有一些说明文档?

afunx commented 7 years ago

“接收推送消息”选项打开后,会与Server保持一个长链接,只有Device配合开发,采用MBox模型(Server提供的),消息来源为Server。(当然,Device也可以通过MBox模型发送消息给App)

其它情况下,与Server的链接,会保持30秒。如果30秒内,app有更多消息发送给Server,继续使用该链接。否则,使用新的链接。

暂时没有更多的说明文档。