gpt4 book ai didi

java - Android - 如何解析 JSON 数组中的特定值并显示 Toast

转载 作者:行者123 更新时间:2023-12-01 06:51:04 24 4
gpt4 key购买 nike

总体而言,我是 Android 和 Java 新手,正在学习如何进行 JSON 调用。为此,我遵循本指南:http://mobiforge.com/design-development/consuming-json-services-android-apps

这就是让我感到困惑的地方。该教程的作者希望读者调用此 API:http://ws.geonames.org/findNearByWeatherJSON?lat=37lng=122

它返回以下格式的 JSON 对象:

            {
"weatherObservation": {
"clouds":"scattered clouds",
"weatherCondition":"n/a",
"observation":"KCFV 090852Z AUTO 06005KT
10SM SCT090 SCT110 24/20 A3000 RMK AO2
SLP148 T02390200 53002",
"windDirection":60,
"ICAO":"KCFV",
"seaLevelPressure":1014.8,
"elevation":225,
"countryCode":"US",
"lng":-95.56666666666666,
"temperature":"23.9",
"dewPoint":"20",
"windSpeed":"05",
"humidity":78,
"stationName":"Coffeyville, Coffeyville
Municipal Airport",
"datetime":"2012-07-09 08:52:00",
"lat":37.083333333333336
}
}

非常简单,只是 API 不再有效/有限制。为了完成该项目,我选择调用此 API:http://api.openweathermap.org/data/2.5/weather?lat=37.77&lon=-122.419

返回此格式的 JSON

{
"coord": {
"lon": 139,
"lat": 35
},
"sys": {
"country": "JP",
"sunrise": 1369769524,
"sunset": 1369821049
},
"weather": [
{
"id": 804,
"main": "clouds",
"description": "overcast clouds",
"icon": "04n"
}
],
"main": {
"temp": 289.5,
"humidity": 89,
"pressure": 1013,
"temp_min": 287.04,
"temp_max": 292.04
},
"wind": {
"speed": 7.31,
"deg": 187.002
},
"rain": {
"3h": 0
},
"clouds": {
"all": 92
},
"dt": 1369824698,
"id": 1851632,
"name": "Shuzenji",
"cod": 200
}

我可以很好地进行调用,但是如何在“天气”数组中显示“主要”和“描述”字符串?更具体地说,如何将此信息显示为 Toast?

这是我所拥有的:

protected void onPostExecute(String result){

try {


JSONArray weatherArray = new JSONArray(result);
JSONArray wArray = new JSONArray("weather");

String mainWeather = wArray.getString(1);
String mainDescription = wArray.getString(2);

Toast.makeText(getBaseContext(), mainWeather + " - "
+ mainDescription,Toast.LENGTH_SHORT).show();

} catch (Exception e) {
Log.d("ReadWeatherJSONFeedTask", e.getLocalizedMessage());
}

因为我正在遵循 mobiforge 教程,所以除了这个特定的代码块之外,我没有偏离任何其他地方。

感谢您的帮助!

编辑:这里有几个可行的解决方案,请参阅@swats和@user3515851。我选择了@remees-m-syde,因为它很简单。主要是因为他的解决方案不需要我经历 for 循环。

最佳答案

我使用了 optJSONArrayoptString,而不是 getJSONArraygetString,因为“opt”将返回““如果该键没有值..它不会像 getString()

那样抛出任何 异常

尝试下面的代码

     JSONObject rootJsonObj = new JSONObject(result);
JSONArray wArray = rootJsonObj.optJSONArray("weather");
for (int i = 0; i < wArray.length(); i++) {
JSONObject weatherJsonObj = wArray.optJSONObject(i);
String mainWeather = weatherJsonObj.optString("main");
String mainDescription = weatherJsonObj.optString("description");

Toast.makeText(getBaseContext(), mainWeather + " - "
+ mainDescription,Toast.LENGTH_SHORT).show();
}

存在解析问题,您应该从响应结果中获取对象。

编辑:使用optJSONArrayoptString时不需要try catch block 。

关于java - Android - 如何解析 JSON 数组中的特定值并显示 Toast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28758976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com