Я думаю, что этот вопрос больше о понимании контекста и о том, как правильно его использовать.После того, как я много гуглил и «переполнялся стеком», я не мог найти ответ.
Проблема:
при использовании DateUtils.formatDateTime Я не могу использовать «это» в качестве контекста.Сообщение об ошибке соответствует описанию в заголовке.
Информация о приложении:
Это простое приложение для поиска погоды, которое получает информацию о погоде через JSON и отображает ее на экране.
Действия:
- MainActivity.java
- FetchData.java
MainActivity: отображение информации
FetchData: получение информации JSON из API, ее форматирование и отправка обратно в MainActivity
Iя использую DateUtils.formatDateTime в действии FetchData.java и использую это как контекст, не работает.Насколько я понимаю, Контекст предоставил «среду» (?) Того, где вызывается метод.
- Почему «среда» FetchData недопустима?
- Какой контент должен предоставляться вместо?
Помощь очень ценится.Спасибо:)
Код:
private ArrayList<String> getWeatherDataFromJson(String forecastJsontStr) throws JSONException {
ArrayList<String> dailyWeatherInfo = new ArrayList<>();
int dataCount;
DateUtils tempDate = new DateUtils();
JSONObject weatherData = new JSONObject(forecastJsontStr);
JSONArray threeHourWeatherData = weatherData.getJSONArray(JSON_LIST);
dataCount = weatherData.getInt("cnt");
JSONObject tempJSONWeatherData;
for (int i = 0; i < dataCount; i++) {
tempJSONWeatherData = threeHourWeatherData.getJSONObject(i);
tempDate.formatDateTime(this,tempJSONWeatherData.getLong("dt"),
DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_WEEKDAY |
DateUtils.FORMAT_ABBREV_ALL);
[more code here]
return dailyWeatherInfo;
}
Редактировать : Я только что понял, что пропустил важную деталь, а именно это действие расширяет AsyncTask
.После некоторых дальнейших исследований, очевидно, вы предоставляете контекст, добавляя WeakReference
, а затем добавляете контекст в конструктор.
Я добавил следующий код:
private WeakReference<Context> contextWeakReference;
public FetchData (Content context) {
contextWeakReference = new WeakReference<>();
}
tempDate.formatDateTime(contextWeakReference.get(),tempJSONWeatherData.getLong("dt"),
DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_WEEKDAY |
DateUtils.FORMAT_ABBREV_ALL);
Это сделало ошибку исчезнуть, но ядо сих пор не понимаю, почему «это» не работает.