首页 > 解决方案 > 如何为 Http get 请求创建一个 while 循环以不断重复该过程直到某个值为真?在科特林

问题描述

我想发出一个 Http 获取请求。我有一个返回 JSON 作为响应的 API。这个 json 有一个键 can_load,如果有更多的项目要加载,它的值为 true,并且它需要页码来继续加载一组项目。第一次我将页码设为 1,然后我想要页码。保持递增 1 直到 can_load 值为真。我试过创建一个函数。整个过程发生的主体,然后是一个while循环,它在增加pageNum后调用乐趣,但我没有得到任何结果。没有 fun 和 while 循环,我得到 pageNum 1 中的第一组项目。我想将 pageNum 增加到 2,依此类推,直到值为 true。Oncw 布尔值是假的,它应该停止。

   var canload: Boolean

    var pageNum = 1

    fun loadItems() {

    if(status == "1") {



        Log.v("statusUserId", userId!!)


        val httpClient4 = AsyncHttpClient()


            httpClient4.get("https://somesite.com/services/ajax_v6.7.aspx?app=android&ver=6.59&lang=en&countryId=1&cat=getItem&userId=$userId&pageNum=$pageNum&&occasionLink=", object : AsyncHttpResponseHandler() {


                override fun onSuccess(statusCode: Int, headers: Array<out Header>?, responseBody: ByteArray?) {

                    if (responseBody != null) {


                            val charset4 = Charsets.UTF_8

                            val json4 = String(responseBody, charset4)

                            val gson4 = Gson().newBuilder().serializeNulls().create()

                            val itemscreenresult = gson4.fromJson<Json4>(json4, genericType<Json4>())

                            jsonInfo6.addAll(itemscreenresult.result.data)

                            Log.v("json4", json4)
                            Log.v("Itemscreenresult", itemscreenresult.toString())
                            Log.v("Jsoninfo6", jsonInfo6.toString())


                            canload = itemscreenresult.result.can_load
                            Log.v("homeresult userID", canload.toString())


                            itemscreenAdapter?.notifyDataSetChanged()


                            while(canload==true){
                                pageNum = pageNum + 1

                                loadItems()
                            }




                    }



                }

                override fun onFailure(statusCode: Int, headers: Array<out Header>?, responseBody: ByteArray?, error: Throwable?) {
                    Log.v("Test", error?.message ?: "")
                }

            }  )
        }







    }

标签: androidhttpkotlin

解决方案


推荐阅读