Я имею дело с большим объемом данных, скажем, около 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)
}