Как показать прогресс при получении JSON-данных - PullRequest
0 голосов
/ 07 ноября 2019

Я хотел бы получить некоторые данные с моего веб-сервера. Данные являются объектом JSON. Я получаю данные с топливной рамкой. Я хочу заполнить представление о переработчике данных. Но я хочу показать прогресс, пока данные не будут получены.

Но я понятия не имею, как решить эту проблему с топливом.

Я изучил документацию по топливу. Но я не могу найти решение

Код извлекает некоторые данные 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
}

Этот код заполняет представление переработчика

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)

        }

    }
    ```

1 Ответ

0 голосов
/ 07 ноября 2019

вы можете использовать fuel-rxjava (https://github.com/kittinunf/fuel/tree/master/fuel-rxjava) для отображения прогресса. Зарегистрируйте наблюдателя, чтобы уведомить индикатор выполнения, используя rx-java

...