【发布时间】:2021-01-24 12:06:51
【问题描述】:
您好,我是 Android Studio Kotlin 的新手,我遇到了这个问题:我有一个由 OpenWeatherMap API 返回的 JSON 字符串。过去link 提出了类似的问题,但它是 Java。
This is a typical string:
{
"coord": {
"lon": -2.93,
"lat": 43.26
},
"weather": [{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
}],
"base": "stations",
"main": {
"temp": 60.69,
"feels_like": 62.33,
"temp_min": 59,
"temp_max": 63,
"pressure": 1023,
"humidity": 100
},
"visibility": 10000,
"wind": {
"speed": 3.36,
"deg": 120
},
"clouds": {
"all": 20
},
"dt": 1602195029,
"sys": {
"type": 1,
"id": 6395,
"country": "ES",
"sunrise": 1602224311,
"sunset": 1602265138
},
"timezone": 7200,
"id": 3128026,
"name": "Bilbao",
"cod": 200
}
这是我的代码:
package com.example.downloadtest
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import org.jetbrains.anko.doAsync
import org.jetbrains.anko.uiThread
import org.json.JSONObject
import java.net.URL
import java.util.concurrent.Executors
val executor = Executors.newScheduledThreadPool(5)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
doAsync(executorService = executor) {
//val result = URL("https://httpbin.org/get").readText()
val result = URL("https://api.openweathermap.org/data/2.5/weather?q=Bilbao,spain&units=imperial&APPID=-------------").readText()
val textView = findViewById(R.id.txtView) as TextView
uiThread {
//textView.setText(result)
println(result)
//toast(result)
val data = StringBuilder()
val jsonObject = JSONObject(result)
val jsonArray = jsonObject.optJSONArray("weather")
println(jsonArray)
for (i in 0 until jsonArray.length()){
val jsonObject = jsonArray.getJSONObject(i)
val main = jsonObject.optString("main").toString()
val desc = jsonObject.optString("description").toString()
val icon = jsonObject.optString("icon").toString()
data.append("Bilbao Weather: \n").append(main).append(" : ").append(desc).append(" : ").append(icon)
textView.text = data.toString()
}
}
}
}
}
如您所见,我可以解析字符串的一部分,但无法解析其他任何内容。如果我想解析“国家”或“名称”,我该怎么做?
在此先感谢您的帮助。
雷。
【问题讨论】:
标签: json android-studio kotlin anko