2015-11-20 4 views
0

У меня есть задача async для действия, которое выполняется при запуске. Если пользователь выбирает местоположение вручную, то URL-адрес включает значение, которое передается как параметр в асинтезу, и если пользователь не определяет местоположение, в async-задании используется URL-адрес по умолчанию. Моя проблема в том, что я не могу позвонить url[0] в свой код, если параметр не указан. Есть ли способ проверить и посмотреть, был ли параметр передан в задачу async? Ниже моя попытка. Я пробовал url[0].isEmpty() и url[0] == null но оба дают мне IndexOutOfBounds ошибки.Проверьте, не имеет ли значение параметра AsyncTask значение null

private class CallDestination extends AsyncTask<String, Void, JSONObject>{ 
     protected JSONObject doInBackground(String...url){ 

      String MYURL = ""; 

      if(url[0].isEmpty()){ 
       MYURL = "http://thevisitapp.com/api/destinations/read?identifiers=10011"; 
      } else{ 
       MYURL = "http://thevisitapp.com/api/destinations/read?identifiers=" + url[0]; 
      } 
      //TODO make this dynamic as it's passed in from other activity through intent 


      HttpRequest request = new HttpRequest(); 
      return request.getJSONFromUrl(MYURL); 
} 

ответ

1

Попробуйте if(url.length ==0), чтобы проверить, не имеет значения null!

1

Вы можете проверить, если параметр был обеспечен или не так:

if(url == null) 

Вы получаете ArrayIndexOutOfBoundsException при проверке if(url[0].length == 0), потому что url является null, который в основном означает, что массив содержит 0 элементов, которые также означает, что вы не можете получить доступ к url[0], так как это будет считаться вне допустимого диапазона.

0

Знаете ли вы, что String... в String... url - это массив? Таким образом, вы можете реализовать несколько уровень проверки:

  1. Проверьте url пуст:

    if(url.length() == 0){ 
        //error, no URL given 
    } 
    
  2. Проверьте url имеет значение, но нуль:

    if(url[0] == null){ 
        //error, url is null 
    } 
    
Смежные вопросы