Я пытаюсь отобразить данные JSON в формате диаграммы.Проблема здесь заключается в том, что при загрузке фрагмента у меня нет доступных данных диаграммы, но, если я щелкаю по фрагменту, заполняется диаграмма.Я не уверен, что блокирует начальную загрузку графика.Код не показывает какую-либо ошибку, но фрагмент показывает диаграмму после клика.Любая помощь приветствуется.
Основной фрагмент
class TestFragment : Fragment() {
var volleyRequest: RequestQueue?=null
val TestLink="https://www.abc.app"
companion object {
val TAG: String = TestFragment::class.java.simpleName
fun newInstance() = TestFragment()
}
lateinit var requestQueue: RequestQueue
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
activity?.title=getString(R.string.title_home)
val view=layoutInflater.inflate(R.layout.fragment_Test,container,false)
requestQueue=Volley.newRequestQueue(this.context)
getTestData(TestLink,
{
body -> Log.d("Network", "Success: $body")
var test= "[{\"date\":\"2018-12-12\",\"students\":\"10\"},{\"date\":\"2018-12-13\",\"students\":\"12\"},{\"date\":\"2018-12-14\",\"students\":\"13\"},{\"date\":\"2018-12-15\",\"students\":\"14\"},{\"date\":\"2018-12-16\",\"students\":\"11\"},{\"date\":\"2018-12-17\",\"students\":\"22\"},{\"date\":\"2018-12-18\",\"students\":\"33\"}]"
val jsonStringArray = test.toString()
val entries = ArrayList<BarEntry>()
val labels = ArrayList<String>()
val arr = JSONArray(jsonStringArray)
for (i in 0 until arr.length()) {
entries.add(BarEntry(arr.getJSONObject(i).getInt("students").toFloat(), i))
labels.add(arr.getJSONObject(i).getString("date"))
}
val barDataSet = BarDataSet(entries, "Test Data")
val data = BarData(labels, barDataSet)
barChart.data = data
barChart.setDescriptionTextSize(10f)
barChart.setValueTextSize(10f)
barChart.yLabels.textSize=10f
// volleyRequest!!.add(stringReq)
},
{ error -> Log.d("Network", "Error", error) }
)
}
override fun onDestroy() {
super.onDestroy()
requestQueue.cancelAll { true }
}
fun getTestData(Url:String, onSuccess: (String) -> Unit, onError: (Throwable) -> Unit)
{
print("Url Value is:"+Url)
val petRequest = StringRequest(Request.Method.GET, Url, Response.Listener {
onSuccess(it)
},
Response.ErrorListener {
onError(it)
})
requestQueue.add(petRequest)
// volleyRequest!!.add(petRequest)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View?
{
activity?.title = getString(R.string.title_home)
val view = inflater.inflate(R.layout.fragment_Test, container, false)
return view
}
}