2013-12-21 3 views
-1

Использование facebook fql, иногда, когда на моей странице нет сообщений, удовлетворяющих запросу ниже, запрос возвращает пустую строку сообщения, как я могу избежать исключения в этом случае.Избегайте исключения при запросе пустого запроса facebook

код:

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)' в вашем коде, и в исключении указано, что вы попросили элемент списка, которого не было. Таким образом, нет нулевого элемента. 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 ject, которого вы даже не знаете, существует:

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

Он получает исключение, потому что он пытается * извлечь * элемент, который не существует. Если он каким-то образом попытался вызвать метод, он предположительно получил бы исключение NullPointerException. Дело в том, что в queryResults нет нулевого элемента. Если вы проверите 'size()', то будет возвращено ноль. –

+0

@HotLicks Это точно моя точка. «If (! QueryResults.isEmpty()) в строке 1 моего кода блокирует это. – spork

Смежные вопросы