如何在获取JSON数据时显示进度

问题描述 投票:0回答:1

我想从我的Web服务器上获取一些数据。数据是一个JSON对象。我使用燃料框架获取数据。我想用数据填充一个recyclerview。但我想显示一个进度,直到获取数据为止。

但是我不知道如何用燃油解决这个问题。

我已经研究了燃料文件。但我找不到解决方法

代码获取一些JSON数据

fun fetchMyThings(): List<Thing> {
    val username = "xxxx"
    val password = "xxxxxxxxx"
    val things = mutableListOf<Thing>()
    Fuel.get("https://www.thingurl.com/things")
            .authentication()
            .basic(username, password)
            .responseJson { request, response, result ->
                request.responseProgress()
                val arr: JSONArray = result.get().array()

                println(arr.length())
                for (i in 0 until arr.length()) {
                    var elem: JSONObject = arr[i] as JSONObject
                    var obj: JSONObject = elem
                    var thing = Thing(UUID.fromString(obj.getString("uuid")))
                    thing.summary = obj.getString("summary")
                    things += thing
                    println(thing)
                }

            }
    return things
}

此代码填充了recyclerview

private fun fillRecyclerView(things : List<Thing>) {
    val recyclerView = findViewById<RecyclerView>(R.id.main_recycler)
    val mainActivityRecyclerAdapter = MainActivityAdapter(this, things)
    recyclerView.adapter = mainActivityRecyclerAdapter
    recyclerView.layoutManager = LinearLayoutManager(this)
}

期望:使用燃料进行进度处理

非常感谢您的帮助

下一次尝试...

fun getThings(): Single<Result<String, FuelError>> {
    val username = "********"
    val password = "********"

    val http = "https://www.nowhere.com/thing/"
            .httpGet()
            .authentication()
            .basic(username, password)
            .rxString(Charsets.UTF_8)
    return http
}
class MainActivity : AppCompatActivity() {
    var things: List<Thing> = emptyList()
    protected lateinit var adapter: MainActivityAdapter


    override fun onCreate(savedInstanceState: Bundle?) {
        //....

        fillRecyclerView(things)

    Server.getThings().subscribe { p ->
        println(p)
        val arr: JSONArray = JSONArray(p.component1())

        for (i in 0 until arr.length()) {
            var elem: JSONObject = arr[i] as JSONObject
            var obj: JSONObject = elem
            var thing = Thing(UUID.fromString(obj.getString("uuid")))
            thing.summary = obj.getString("summary")
            things += thing
            println(thing)
        }
        adapter?.notifyDataSetChanged()
        findViewById<ProgressBar>(R.id.ac_main_progress).visibility = View.GONE
    }

        private fun fillRecyclerView(things : List<Thing>) {
                val recyclerView = findViewById<RecyclerView>(R.id.main_recycler)
                val mainActivityRecyclerAdapter = MainActivityAdapter(this, things)
                adapter = mainActivityRecyclerAdapter
                recyclerView.adapter = mainActivityRecyclerAdapter
                recyclerView.layoutManager = LinearLayoutManager(this)

        }

    }
    ```
android android-progressbar fuel
1个回答
0
投票

您可以使用fuel-rxjava(https://github.com/kittinunf/fuel/tree/master/fuel-rxjava)显示进度。注册观察者以使用rx-java

通知进度栏
© www.soinside.com 2019 - 2024. All rights reserved.