我正在将 Nomics API 与我的 CryptoCurrencyTrackerApp 一起使用。我已经在 github 中搜索了我的问题,但找不到合适的解决方案。所以这是我的问题:我的应用程序工作完全正常,但我无法在回收器 View 中加载加密货币 Logo 。 这是我运行应用程序时的照片:
我已经设法获取价格、名称、符号,但如你所见,我无法加载图像 API nomics 使用 svg 格式作为图像 有人可以帮我加载 ImageView 吗 这是我的代码:
class CoinViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val nameView: TextView = itemView.findViewById(R.id.coinName)
private val priceView: TextView = itemView.findViewById(R.id.priceUsd)
private val currencyView: TextView = itemView.findViewById(R.id.coinSymbol)
private val imageCurrencyView : ImageView = itemView.findViewById(R.id.imgCurrencyIcon)
fun bind(cryptoModel: CoinModel) {
this.nameView.text = cryptoModel.name
this.currencyView.text = cryptoModel.currency
when {
cryptoModel.price ?: 0.0 > 100.0 -> {
this.priceView.text = String.format("%.0f", cryptoModel.price)
}
cryptoModel.price ?: 0.0 > 1.0 -> {
this.priceView.text = String.format("%.2f", cryptoModel.price)
}
else -> {
this.priceView.text = String.format("%.4f", cryptoModel.price)
}
}
}
} 我的货币 fragment
class CurrencyFragment : Fragment() {
private val baseUrl = "https://api.nomics.com/v1/currencies/"
private var cryptoModels: ArrayList<CoinModel>? = arrayListOf()
private var fragmentView: View? = null
private var recyclerView: RecyclerView? = null
private var coinAdapter: CoinAdapter? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
if (fragmentView == null) {
fragmentView = inflater.inflate(R.layout.fragment_currency, container, false)
}
return fragmentView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
recyclerView = view.findViewById(R.id.coin_recycler_view)
coinAdapter = context?.let { CoinAdapter(it, arrayListOf()) }
recyclerView?.layoutManager =
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
recyclerView?.adapter = coinAdapter
loadData()
}
private fun loadData() {
val retrofit = Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build()
val service = retrofit.create(CryptoAPI::class.java)
val call = service.getData()
call.enqueue(object : Callback<List<CoinModel>> {
@SuppressLint("NotifyDataSetChanged")
override fun onResponse(
call: Call<List<CoinModel>>,
response: Response<List<CoinModel>>
) {
if (response.isSuccessful) {
response.body()?.let {
cryptoModels = ArrayList(it)
coinAdapter?.cryptoList = cryptoModels ?: arrayListOf()
coinAdapter?.notifyDataSetChanged()
}
}
}
override fun onFailure(call: Call<List<CoinModel>>, t: Throwable) {
t.printStackTrace()
}
})
}
} 我的币模型
data class CoinModel(
var currency: String?="",
var price: Double? = 0.0,
var name: String?="",
var logo_url: String? = "",
var rank: String = "",
) 我的 CoinAdapter
class CoinAdapter(var context: Context, var cryptoList: ArrayList<CoinModel>):RecyclerView.Adapter<CoinViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CoinViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.currency_item,parent,false)
return CoinViewHolder(view,)
}
override fun onBindViewHolder(holder: CoinViewHolder, position: Int) {
holder.bind(cryptoList[position])
}
override fun getItemCount(): Int {
return cryptoList.count()
}
} 最后是我的界面:
interface CryptoAPI {
@GET("ticker?key=mykey")
fun getData():Call<List<CoinModel>>
}
最佳答案
我找到了在 imageview 中显示 svg 的解决方案。我遇到了同样的问题,然后我使用了以下库。我可以很好地从 API 和本地文件在 android Imageview 中显示 SVG 图像
关于android - 在 Kotlin 中将 SVG 文件从 API 加载到 Android 中的 ImageView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71964976/