gpt4 book ai didi

json - 有一种干净的DRY方法可以从HTTP请求JSON更新多个textViews吗?

转载 作者:行者123 更新时间:2023-12-02 13:24:30 26 4
gpt4 key购买 nike

我有以下Kotlin / Anko / Android Activity 。

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来说,这似乎是完全静态且冗长的方式。

有没有更好的办法?

最佳答案

由于只有TextView,并且您只需要更改其文本,因此可以通过以下方式简化代码:

  • 为存储ID的Order属性添加映射:
    private val orderPropertyToTextViewId = mapOf(
    Order::customer to R.id.order_detail_customer,
    Order::address to R.id.order_detail_address,
    Order::postalCode to R.id.order_detail_postal_code,
    Order::phone to R.id.order_detail_phone
    )
  • 创建遍历 map 的 View :
    verticalLayout {
    for ((property, textViewId) in orderPropertyToTextViewId) {
    textView { id = textViewId }
    }
    }
  • 更新在 map 上迭代的文本:
    for ((property, textViewId) in orderPropertyToTextViewId) {
    findViewById<TextView>(textViewId).text = property.get(order)
    }

  • 如果您存储 findViewById<TextView>(...)调用返回的 TextView而不是 map 中的ID,则可以走得更远,摆脱ID和 textView { ... },但这需要进一步试验。

    关于json - 有一种干净的DRY方法可以从HTTP请求JSON更新多个textViews吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42244354/

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