2014-01-20 64 views
0

我有一個模塊,它使用簡單的HTTP帖子從FHEM服務器(家庭自動化)請求狀態(技術上是JSON對象)。Java輪詢或收聽響應的URL [Java SE]

我該如何輪詢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

您可以同時發佈請求和讀取循環結果,並在每次輪詢和其他輪詢之間使用Thread.sleep來暫停。我對FHEM並不熟悉,但也許有一種更有效的方法,您可以使用FHEM將狀態更改推送到您的應用程序,而不必持續輪詢它。

+0

嘿謝謝,但我在FHEM上查了很多,不幸的是,通過POST的響應是獲取狀態的唯一方法(截至目前)。 – user3215614

+0

然後我想在無限循環中調用requestState是我想到的唯一選項。如果FHEM服務器無法處理您生成的請求量,您可能需要在輪詢之間插入暫停(使用Thread.sleep) –