在我的应用程序中,我尝试通过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/