Kotlin检查数据json字符串是否为null

时间:2018-11-14 16:07:54

标签: kotlin

我正在尝试通过api数据json构建用于航班时刻表的应用程序。我的应用程序运行正常,没有问题。我唯一的问题是飞行时间。有些航班的值是空的,所以我想检查时间是否为空,返回N / A。

时间的结果,如果data json中的值为null。

enter image description here

HandleJson

   private fun handleJson (jsonString: String?){

            val jsonObj = JSONObject(jsonString)
            val result = jsonObj.getJSONObject("result")
            val response = result.getJSONObject("response")
            val airport = response.getJSONObject("airport")
            val pluginData = airport.getJSONObject("pluginData")
            val schedule = pluginData.getJSONObject("schedule")
            val arrivals = schedule.getJSONObject("arrivals")
//        val data = arrivals.getJSONObject("data")
            val jsonArray = JSONArray(arrivals.get("data").toString())

            val list =  ArrayList<FlightShdu>()
            var x = 0
            while (x < jsonArray.length()){

                val jsonObject = jsonArray.getJSONObject(x)



                list.add(FlightShdu(
                    jsonObject.getJSONObject("flight").getJSONObject("identification").getJSONObject("number").getString("default"),
                    jsonObject.getJSONObject("flight").getJSONObject("airline").getString("short"),
                    jsonObject.getJSONObject("flight").getJSONObject("status").getJSONObject("generic").getJSONObject("status").getString("text"),
                    jsonObject.getJSONObject("flight").getJSONObject("airline").getJSONObject("code").getString("icao"),
                    jsonObject.getJSONObject("flight").getJSONObject("time").getJSONObject("scheduled").getString("departure"),
                    jsonObject.getJSONObject("flight").getJSONObject("airport").getJSONObject("origin").getJSONObject("code").getString("iata"),
                    jsonObject.getJSONObject("flight").getJSONObject("aircraft").getJSONObject("model").getString("code"),
//                    for more information
                    jsonObject.getJSONObject("flight").getJSONObject("time").getJSONObject("real").getString("departure"),
                    jsonObject.getJSONObject("flight").getJSONObject("time").getJSONObject("estimated").getString("arrival")?: "N/A"
//                    jsonObject.getJSONObject("flight").getJSONObject("time").getJSONObject("estimated").getString("arrival"),
//                    jsonObject.getJSONObject("flight").getJSONObject("status").getJSONObject("generic").getJSONObject("status").getString("diverted")



                    ))


                x++
            }
            list.forEach(::println)

            val adapter = ListAdapte(this@MainActivity,list)
            flight_arrivel_list.adapter = adapter

        }

意图活动

val  TimeArrival = bundle.getString("TimeArrival")?: "N/A"
    timearraiveId2.text=getDateTime(TimeArrival)

   fun getDateTime(s: String): String? {
        try {
            val sdf = SimpleDateFormat("KK:mm a")
            val netDate = Date(s.toLong() * 1000)
            return sdf.format(netDate)
        } catch (e: Exception) {
            return e.toString()

        }
    }
我尝试使用此代码,但是他不起作用。

  if (TimeArrival==null) {
        timearraiveId2.setText("N/A")
    }

1 个答案:

答案 0 :(得分:1)

替换:

try {
    val sdf = SimpleDateFormat("KK:mm a")
    val netDate = Date(s.toLong() * 1000)
    return sdf.format(netDate)
} catch (e: Exception) {
    return e.toString()

}

使用

try {
    val sdf = SimpleDateFormat("KK:mm a")
    val netDate = Date(s.toLong() * 1000)
    return sdf.format(netDate)
} catch (e: Exception) {
    return "N/A"
}

您不希望错误本身显示在recyclerview中,
您想要"N/A"
因此id时间为null,然后catch语句将返回"N/A"