2016-12-04 3 views
0

У меня есть приложение, которое связывается с API погоды Yahoo, чтобы получить локальную скорость ветра. Это не важно, чтобы получить скорость ветра, но желательно и улучшает точность моего приложения. У меня есть метод, который сначала проверяет активное интернет-соединение перед вызовом refreshWeather. Все работает великолепно. Тем не менее, я хочу добавить код для отмены запроса, если он не получит данных после .. скажем ... 15 секунд. Вот этот метод. Любые предложения оценили.Отмена соединения по URL-адресу через определенный промежуток времени

public void refreshWeather (final double lat, final double lon){ 

    new AsyncTask<String, Void, String>() { 
     @Override 
     protected String doInBackground(String... strings) { 

      String YQL = String.format("select * from weather.forecast where woeid in (SELECT woeid FROM geo.places WHERE text=\"(%s,%s)\")", lat, lon); 
      String endpoint = String.format("https://query.yahooapis.com/v1/public/yql?q=%s&format=json", Uri.encode(YQL)); 

      try { 
       URL url = new URL(endpoint); 
       URLConnection connection = url.openConnection(); 
       InputStream inputStream = connection.getInputStream(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
       StringBuilder result = new StringBuilder(); 
       String line; 
       while ((line = reader.readLine()) !=null){ 
        result.append(line); 
       } 
       return result.toString(); 
      } catch (Exception e) { 
       error = e; 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 

      if (s == null && error != null){ 
       callback.serviceFailure(error); 
       return; 
      } 
      try { 
       JSONObject data = new JSONObject(s); 
       JSONObject queryResults =data.optJSONObject("query"); 
       int count =queryResults.optInt("count"); 
       if (count ==0){ 
        callback.serviceFailure(new LocationWeatherException("No wind information found for your location")); 
        return; 
       } 

       Channel channel = new Channel(); 
       channel.populate(queryResults.optJSONObject("results").optJSONObject("channel")); 
       callback.serviceSuccess(channel); 
      } catch (JSONException e) { 
       callback.serviceFailure(e); 
      } 
     } 
    }.execute(); 

} 

ответ

0

Я понял это сам. Я добавляю решение, если кто-то ищет то же самое.

URLConnection connection = url.openConnection(); 
    connection.setConnectTimeout(15000); //15 seconds 
    connection.setReadTimeout(15000); //15 seconds 
Смежные вопросы