android - 如何将获取的数据转换为产品列表?

标签 android list kotlin fetch adapter

在我的应用程序中,我尝试通过api显示Cars的“产品”。该API有多种产品,但是我的代码仅显示1种产品,并且没有将我的提取数据转换为列表!

这是我的获取数据代码GET:

fun carsList(context: Context, complete: (Boolean) -> Unit) {
        val carList = object : JsonObjectRequest(Method.GET, URL_CAR_LIST, null, Response.Listener { response ->
            try {
                val list: List<CarsListData> = ArrayList()
                val listCar = response.getJSONArray("listCar")

                for (i in 0 until listCar.length()) {
                    val carData= listCar.getJSONObject(i)
                    CarsListData.title = carData.getString("adTitle")
                    CarsListData.date = carData.getString("adDate")
                    CarsListData.price = carData.getDouble("adPrice")
                    CarsListData.category = carData.getString("category")
                    CarsListData.brand = carData.getString("brand")
                    CarsListData.model = carData.getString("brandModel")
                    CarsListData.distance = carData.getDouble("kilometer")
                    CarsListData.year = carData.getString("modelYear")
                    CarsListData.fuel = carData.getString("fuelType")
                    CarsListData.gear = carData.getString("gearType")
             }
                list
                complete(true)
            } catch (e: JSONException) {
                Log.d("JSON", "EXC" + e.localizedMessage)
            }
        }, Response.ErrorListener {error ->
            Log.d("ERROR", "Could not login user: $error")
            complete(false)
        }) {
            override fun getBodyContentType(): String {
                return "application/json; charset=utf-8"
            }
        }
        Volley.newRequestQueue(context).add(carList)
    }

这是我的Adapter类,在这里我明确地称其为“计数”,以便读取不止一种产品:
class CarAdapter(context: Context, cars: List<CarsListData>) : BaseAdapter() {

    val context = context
    val cars = cars

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val carsView: View

        carsView = LayoutInflater.from(context).inflate(R.layout.cars_list, null)

        val car = cars[position]

            val carImage: ImageView = carsView.findViewById(R.id.carDetailsImage)
            val carTitle: TextView = carsView.findViewById(R.id.carDetailsTitle)
            val carCategory: TextView = carsView.findViewById(R.id.carDetailsCategory)
            val carPrice: TextView = carsView.findViewById(R.id.carDetailsPrice)
            val carDistance: TextView = carsView.findViewById(R.id.carDetailsDistance)
            val carDate: TextView = carsView.findViewById(R.id.carDetailsDate)
            val carGear: TextView = carsView.findViewById(R.id.cardetailsGear)
            val carYear: TextView = carsView.findViewById(R.id.carDetailsYear)
            val carOil: TextView = carsView.findViewById(R.id.carDetailsOil)


        AuthService.carsList(context){success ->
            if (success) {
                carTitle.text = car.title
                carCategory.text = car.category
                carPrice.text = car.price.toString()
                carDistance.text = car.distance.toString()
                carDate.text = car.date
                carGear.text = car.gear
                carYear.text = car.year
                carOil.text = car.fuel
            }
        }

//        val resourceId = context.resources.getIdentifier(car.image, "drawable", context.packageName)
//        carImage.setImageResource(resourceId)

        return carsView
    }

    override fun getItem(position: Int): Any {
        return cars[position]
    }

    override fun getItemId(position: Int): Long {
        return 0
    }

    override fun getCount(): Int {
        return cars.count()
    }
}

这是“ Activity ”页面,我在其中调用Adapter:
class CarListActivity : AppCompatActivity() {

    lateinit var adapter : CarAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_car_list)

        adapter = CarAdapter(this, listOf(CarsListData))
        CarsListPageItems.adapter = adapter // categoryListView will be not null here

        carDetailsDate.length()
    }
}

如何显示超过1种产品?到目前为止,它可以正常获取数据,但只能获取倒数第二个产品{}的数据

最佳答案

像这样在 list 中增加值(value),
创建您的Model类CarsListData的构造函数,并在构造函数中添加如下所示的参数

这是您的Model(数据)类,

  data class CarsListData(var adtitle:String,var adDate:String,
                          var adPrice:String,var category:String,
                          var brand:String,var brandModel:String,
                          var kilometer:String,var modelYear:String,
                          var fuelType:String,var gearType:String)

这是您的代码,可在列表中添加值,
  fun carsList(context: Context, complete: (Boolean) -> Unit) {
    val carList = object : JsonObjectRequest(Method.GET, URL_CAR_LIST, null, Response.Listener { response ->
        try {
            val list: List<CarsListData> = ArrayList()
            val listCar = response.getJSONArray("listCar")

            for (i in 0 until listCar.length()) {
                val carData= listCar.getJSONObject(i)
                list.add(CarsListData(carData.getString("adTitle"),carData.getString("adDate"),
                    carData.getString("adPrice"),carData.getString("category"),carData.getString("brand"),
                    carData.getString("brandModel"),carData.getString("kilometer"),carData.getString("modelYear"),
                    carData.getString("fuelType"),carData.getString("gearType")))
            }

            complete(true)
        } catch (e: JSONException) {
            Log.d("JSON", "EXC" + e.localizedMessage)
        }
    }, Response.ErrorListener {error ->
        Log.d("ERROR", "Could not login user: $error")
        complete(false)
    }) {
        override fun getBodyContentType(): String {
            return "application/json; charset=utf-8"
        }
    }
    Volley.newRequestQueue(context).add(carList)
}

关于android - 如何将获取的数据转换为产品列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59983819/

相关文章:

python - 从列表或元组中显式选择项目

c# - 在 C# List 中查找重复字符串的索引

android - 表情符号颜色 Google Play 商店应用程序

android - 数据绑定(bind)膨胀非常慢

android - 在 Recyclerview 中下载图片

android - 我如何让android布局重绘?

Android webview - 如何使用 com.android.chrome 而不是 com.android.webview

android - 如何从 Intent 调用创建自定义 PopupWindow?

python - python 的 "in"语言构造对于列表是线程安全的吗?

spring - Kotlin测试无法从命令行通过ClassNotFoundException进行失败,但可以通过IntelliJ进行