我有一个模块,它使用一个简单的HTTP帖子从FHEM服务器(家庭自动化)请求状态(技术上是一个JSON对象)。
如何轮询requestState方法,以便在URL上持续监听(如每125毫秒)状态更改?
[注意:我没有使用任何服务器,这是一个从Main函数调用的普通Java程序。]
举例说明:
public static boolean requestState(){
HttpPost post = new HttpPost("http://localhost:8083/fhem?cmd=jsonlist+device1");
try{
HttpResponse response = client.execute(post);
BufferedReader rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
//response is a JSONObject
JSONObject o = new JSONObject(result.toString());
//get the status from the JSON object
System.out.println(o.getJSONObject("Result").get("STATE"));
String STATE = o.getJSONObject("Result").get("STATE");
if(STATE.equals("OPEN"))
return false;
else
return true;
}
catch(Exception e){
e.printStackTrace();
}
}
我想要达到的目标是:
keep listening to URL
parse response to judge the status
if status == OPEN
soundAlarm();
提前致谢!
答案 0 :(得分:0)
您可以保持发布请求并在循环中读取结果,并使用Thread.sleep在每个轮询和另一个轮询之间放置暂停。我不熟悉FHEM,但也许有一种更有效的方法,你可以使用FHEM将状态更改推送到你的应用程序而不必不断轮询它。