我有以下Kotlin/Anko/Android活动。是否有干净的DRY方式来从HTTP请求JSON更新多个textViews?
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.TextView
import com.fasterxml.jackson.module.kotlin.readValue
import com.github.kittinunf.fuel.Fuel
import eu.gwapi.laaketilaus.util.JSON
import eu.gwapi.laaketilaus.util.Order
import org.jetbrains.anko.find
import org.jetbrains.anko.textView
import org.jetbrains.anko.toast
import org.jetbrains.anko.verticalLayout
class OrderDetailsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val order_id: Long = intent.extras.getLong("order_id")
verticalLayout {
textView {
id = R.id.order_detail_customer
}
textView {
id = R.id.order_detail_address
}
textView {
id = R.id.order_detail_postal_code
}
textView {
id = R.id.order_detail_phone
}
}
getOrder(order_id)
}
fun getOrder(order_id: Long) {
Fuel.get("https://my.api.endpoint/" + order_id.toString()).responseString { request, response, result ->
val (json, err) = result
if (err != null) {
toast(err.toString())
} else {
val order: Order = JSON.readValue(json!!)
find<TextView>(R.id.order_detail_customer).text = order.customer
find<TextView>(R.id.order_detail_address).text = order.address
find<TextView>(R.id.order_detail_postal_code).text = order.postal_code
find<TextView>(R.id.order_detail_phone).text = order.phone
}
}
}
}
对于像我这样顽固的pythonista,这似乎很静态和冗长的做法。
有没有更好的方法?
'orderPropertyToTextViewId.forEach {属性,textViewId - > ...}'比依赖于'for'更多的功能(地道)代码循环 –