2014-03-21 4 views
0

В моем коде Android у меня есть AsyncTask, который, кажется, невозможно преобразовать в простую функцию Public void.Android, преобразующий AsyncTask в общедоступную функцию void?

private class JSONWeatherTask extends AsyncTask<String, Void, Weather> { 

    @Override 
    protected Weather doInBackground(String... params) { 
     Weather weather = new Weather(); 
     String data = ((new WeatherHttpClient()).getWeatherData(params[0])); 
     // WeatherC = params[0]; 
     try { 
      weather = JSONWeatherParser.getWeather(data); 

      // Let's retrieve the icon 
      weather.iconData = ((new WeatherHttpClient()).getImage(weather.currentCondition.getIcon())); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return weather; 

    } 

    @Override 
    protected void onPostExecute(Weather weather) { 
     super.onPostExecute(weather); 

     if (weather.iconData != null && weather.iconData.length > 0) { 
      // Bitmap img = BitmapFactory.decodeByteArray(weather.iconData, 0, weather.iconData.length); 
      //imgView.setImageBitmap(img); 
     } 
     WeatcherCels = ("" + Math.round((weather.temperature.getTemp() - 273.15)) + " C"); 

     Toast.makeText(context, WeatcherCels, Toast.LENGTH_SHORT).show(); 


    } 

} 

Путь, который я исполняю task является:

JSONWeatherTask task = new JSONWeatherTask(); 
    task.execute(new String[]{"canada,toronto"}); 

Однако я пытаюсь использовать просто что-то вроде:

String WeatherStr = getWeather("canada,toronto"); 
+0

Почему вы хотите его изменить? Если вы выполняете некоторую фоновую задачу, например, загружая данные из Интернета в свою Asynctask, не меняйте ее на простую функцию. В противном случае он отобразит «Исключение MainThread» в устройствах с более высокой версией. – Kunu

ответ

0

вы можете сделать:

создайте способ следующим образом:

String getWeather(String... arr) 
{ 
    JSONWeatherTask task = new JSONWeatherTask(); 
    task.execute(arr); 
    return task.get(); 
} 

, а затем

String weather = getWeather("a","b"); 

, но он будет блокировать пользовательский интерфейс, пока asyntask не doinbackground законченным.

+0

Я просто не хочу, чтобы мое приложение было в фоновом режиме ... Разве это не то же самое, что задача JSONWeatherTask = new JSONWeatherTask(); task.execute (arr); ?? – Pedrum

+0

, поскольку вы делаете сетевой запрос, вам нужно использовать нить или асинтез. –

+0

Возникла проблема с return task.get(); – Pedrum

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