我想这个问题更多的是关于理解上下文以及如何正确使用它。在谷歌搜索和“stackoverflowed”很多之后,我找不到答案。
问题:
使用 DateUtils.formatDateTime 时,我不能使用“this”作为上下文。错误消息如标题中所述。
应用程序信息:
这是一个简单的天气应用程序,通过 JSON 检索天气信息并将其显示在屏幕上。
活动:
- MainActivity.java
- FetchData.java
MainActivity:显示信息
FetchData:从 API 获取 JSON 信息,对其进行格式化并将其发送回 MainActivity
我在 FetchData.java 活动中使用 DateUtils.formatDateTime 并且使用“this”作为上下文不起作用。据我了解,Context 提供了调用方法的“环境”(?)。
- 为什么 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
。经过一些进一步的研究,显然你提供了上下文 bei 添加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);
这使错误消失了,但我仍然不明白为什么“这个”不起作用。