Правильный способ использования Thread, Volley в android studio kotlin - PullRequest
0 голосов
/ 07 августа 2020

Я имею дело с большим объемом данных, скажем, около 30,000, и я возьму из rest-api, который я создал, и сохраню его в памяти мобильного телефона. Итак, для этого процесса я прочитал несколько ресурсов о многопоточности для; это может помочь мне с моим беспокойством. но я все еще думаю об этих ресурсах и читаю их, но я все еще не понимаю. Когда использовать Thread? Могу ли я использовать это для получения больших объемов данных из rest-api? как правильно получить большие данные из rest-api? Я использую volley для этого сценария, и когда я тестирую его на телефонах, в некоторых случаях progressbar в UI перестает вращаться, но все еще получает данные, или приложение перестает отвечать и принудительно закрывает приложение.

вот мой фрагмент кода на simplerequest с использованием залпа:

private fun fetchApiData() {
        val alertDialogProgressBar = AlertDialog.Builder(activity)

        val progressBarView: View = LayoutInflater.from(activity).inflate(R.layout.progress_bar_sync_data,
            null,
            false)

        alertDialogProgressBar.setView(progressBarView)
        alertDialogProgressBar.setCancelable(false)

        val loadAlertDialogProgressBar = alertDialogProgressBar.create()
        loadAlertDialogProgressBar.show()

        val queue = Volley.newRequestQueue(activity)

        val stringRequest = StringRequest(Request.Method.GET,
        Links().LINK_FETCH_MCP_DATA, Response.Listener<String> {
                response ->

                Log.i(TAG, response)

                if(response != null) {
                    val jsonArray = JSONArray(response)

                    realm.executeTransaction { realm ->
                        realm.deleteAll()
                    }

                    var record_id_register = 0

                    for(i in 0 until jsonArray.length()) {
                        val data = jsonArray.getJSONObject(i)

                        record_id_register += 1

                        realm.executeTransaction { realm ->
                            val mData = realm.createObject<MCPRecord>(record_id_register)

                            mData.col_cust_code = data.getString("col_cust_code")
                            mData.col_customer = data.getString("col_customer")
                            mData.col_scode = data.getString("col_scode")
             
                        }
                    }

                    loadAlertDialogProgressBar.dismiss()

                    val successAlertDialog = AlertDialog.Builder(activity)
                    successAlertDialog.setTitle("Done!")
                    successAlertDialog.setMessage("Data record has been sync in to your device successfully, you may now use it offline.")
                    successAlertDialog.setCancelable(false)
                    successAlertDialog.setNegativeButton("Ok", DialogInterface.OnClickListener {
                            dialog, _ ->
                        dialog.dismiss()
                    })

                    successAlertDialog
                        .create()
                        .show()
                }
            }, Response.ErrorListener { error ->

                error.message?.let { Log.e(TAG, it) }

                loadAlertDialogProgressBar.dismiss()

                val errorAlertDialog = AlertDialog.Builder(activity)
                errorAlertDialog.setTitle("Connection Fail")
                errorAlertDialog.setMessage("Could not establish connection from your device to our server, Try again.")
                errorAlertDialog.setCancelable(false)
                errorAlertDialog.setNegativeButton("Ok", DialogInterface.OnClickListener {
                        dialog, _ ->
                    dialog.dismiss()
                })
                errorAlertDialog.show()
            })

        queue.add(stringRequest)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...