Как превратить мои данные выборки в список продуктов? - PullRequest
1 голос
/ 30 января 2020

В моем приложении у меня есть «Продукт» Cars, здесь я пытаюсь отобразить данные из API. 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 classs, где я четко называю "count", чтобы он мог прочитать более 1 продукта:

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 продукта? на данный момент он получает данные в порядке, но получает только данные о последнем последнем продукте {}

1 Ответ

0 голосов
/ 30 января 2020

добавьте значение в список, подобный этому, создайте конструктор вашего класса модели CarsListData и добавьте параметр в конструктор, подобный этому.

Вот класс вашей модели (данные),

  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)
}
...