Android開発の勉強を行っている最中の初心者です。
画面に設置したボタンを押すと、あらかじめ設定しておいたURLからJSONデータをダウンロードし、リサイクラービューに表示するという処理を実装しようと考えています。
ダウンロード中はプログレスバーを表示し、その間は次の処理を行わないで待たせたいのですが、処理が先に進んでしまい、アプリが落ちてしまいます。
現在の書き方の以下のようになっています。
Kotlin
1 2private var _downloadData : String? = null 3 4//ボタン押下時実行 5 fun StartDownload(view: View) { 6 val preText = findViewById<TextView>(R.id.preText) 7 preText.isVisible = false 8 val progress = findViewById<ProgressBar>(R.id.progress) 9 10 val start = DownloadJsonData() 11 start.execute("") 12 13 while(_downloadStr == null) { 14 progress.isVisible = true 15 } 16 17 progress.isVisible = false 18 19 val bundle = Bundle() 20 bundle.putString("JsonData", _downloadStr) 21 22 val transaction = supportFragmentManager.beginTransaction() 23 val recyclerViewFragment = RecyclerViewFragment() 24 recyclerViewFragment.arguments = bundle 25 transaction.replace(R.id.recyclerViewFrame, recyclerViewFragment) 26 transaction.commit() 27 28 }
この_downloadStrがnullではなくなったときに、プログレスバーを非表示にし、リサイクラービューを生成するフラグメントを表示したいのですが、Kotlinではどのように書くのでしょうか。
宜しくお願い致します。
追記
DownloadJsonData()の中身です。
Kotlin
1 2 private inner class DownloadJsonData(): AsyncTask<String, String, String>() { 3 override fun doInBackground(vararg params: String?): String { 4 val urlStr = "https://api.myjson.com/bins/vxnji" 5 val url = URL(urlStr) 6 val con = url.openConnection() as HttpURLConnection 7 con.requestMethod = "GET" 8 con.connect() 9 val stream = con.inputStream 10 val sb = StringBuilder() 11 val reader = BufferedReader(InputStreamReader(stream, "UTF-8")) 12 var line = reader.readLine() 13 while(line != null) { 14 sb.append(line) 15 line = reader.readLine() 16 } 17 reader.close() 18 val result = sb.toString() 19 con.disconnect() 20 stream.close() 21 return result 22 } 23 24 override fun onPostExecute(result: String?) { 25 _downloadStr = result 26 } 27
回答1件
あなたの回答
tips
プレビュー