2013-12-21 2 views
-1

페이스 북 fql을 사용하면 내 페이지에 다음 쿼리를 만족하는 게시물이없는 경우 쿼리에서 빈 메시지 문자열을 반환하지만이 경우 예외를 피할 수있는 방법은 무엇입니까?빈 페이 스북 쿼리를 쿼리 할 때 예외 발생을 피하십시오.

코드 :

String query = "SELECT message,timeline_visibility, created_time FROM stream WHERE source_id = 187050104663230 AND message AND strlen(attachment.fb_object_type) < 1 AND type != 56 AND type = 46 AND strpos(message, \"prayer time(s)\") < 0 AND strpos(message, \"White days\") < 0 AND strpos(message, \"Hadith of the Day:\") < 0 AND created_time > " + facebook_check_post_Unix_Time + "LIMIT 1"; 

try 
{ 
List<JsonObject> queryResults = facebookClient.executeFqlQuery(query, JsonObject.class); 
facebook_post = queryResults.get(0).getString("message"); 
facebook_post_visibility = queryResults.get(0).getString("timeline_visibility"); 
} 
catch (FacebookException e){logger.warn("Unexpected error", e); logger.warn("Unexpected error", e);} 
catch (Exception e){logger.warn("Unexpected error", e); logger.warn("Unexpected error", e);} 

오류 메시지 :

2013-12-22 07:46:35,913 WARN [javafxapplication4.JavaFXApplication4] - Unexpected error 
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.rangeCheck(ArrayList.java:638) 
    at java.util.ArrayList.get(ArrayList.java:414) 
    at java.util.Collections$UnmodifiableList.get(Collections.java:1369) 
    at javafxapplication4.JavaFXApplication4$1.run(JavaFXApplication4.java:1121) 
    at java.util.TimerThread.mainLoop(Timer.java:555) 
    at java.util.TimerThread.run(Timer.java:505) 
+1

예외 추적을 보면 ArrayList.get 작업에서 오류가 발생했음을 알 수 있습니다. 이것은 당신의 코드에서'queryResults.get (0)'연산에 해당하며 예외는 존재하지 않는리스트 요소를 요청했다는 것을 알려줍니다. 따라서 요소 0이 없습니다. Ergo, 코드는 액세스하기 전에 목록에서'isEmpty()'또는'size()'를 검사해야하며 항목이 없으면 액세스하지 않아야합니다. (코드는 하나 이상의 항목이있는 경우를 고려해야합니다.) 정보가 바로 눈앞에 있기 때문에 도움이 필요하지 않습니다. –

답변

0

사용

if(!queryResults.isEmpty()) { 
    JsonObject facebookPost = queryResults.get(0); 
    String message = facebookPost.getString("message"); 
    if(null != message && !"".equals(message)) { 
    // Do whatever you're trying to do with the message here 
    } 
    // Follow the same pattern for timeline_visibility 
} 

당신은 맹목적를 호출하는 것을 시도하고 있기 때문에 예외를 받고있어 방법에 ob 당신도 알지 못합니다 :

facebook_post = queryResults.get(0).getString("message"); 
+0

그는 존재하지 않는 요소를 가져 오려고 *하기 때문에 예외가 발생했습니다. 만약 그가 어떻게 든 그것을 호출하려고하면 아마도 NullPointerException을 얻게 될 것입니다. 요점은 queryResults에 요소 0이 없다는 것입니다.'size()'를 체크하면 is는 0을 반환합니다. –

+0

@HotLicks 정확히 내 요점입니다. 내 코드 블록의 1 행에있는 "if (! queryResults.isEmpty())"가이 문제를 방지합니다. – spork

관련 문제