インターネット経由でJSONデータを取得し、Sqliteに保存するという処理を実現したいと考えています。
https://api.myjson.com/bins/mz57k
画像をこのツール→https://lab.syncer.jp/Tool/Base64-encode/を使ってBase64文字列に変換しており、imageにその文字列が入ったJSONをダウンロードし、Sqliteに保存、後で取り出して画像として扱うのが目標です。
しかし、Sqliteに保存するところで、アプリがクラッシュしてしまいます。
Kotlin
1 2 private inner class DataDownload: AsyncTask<String,String,String>() { 3 override fun doInBackground(vararg params: String?): String { 4 val urlSt = "https://api.myjson.com/bins/mz57k" 5 val url = URL(urlSt) 6 val con = url.openConnection() as HttpsURLConnection 7 con.requestMethod = "GET" 8 var result = "" 9 var inst: InputStream? = null 10 con.connect() 11 inst = con.inputStream 12 val sb = StringBuilder() 13 val reader = BufferedReader(InputStreamReader(inst!!)) 14 var line = reader.readLine() 15 while (line != null) { 16 sb.append(line) 17 line = reader.readLine() 18 } 19 reader.close() 20 result = sb.toString() 21 con.disconnect() 22 inst.close() 23 return result 24 } 25 26 override fun onPostExecute(result: String?) { 27 super.onPostExecute(result) 28 var rootJSON = JSONObject(result!!) 29 val id = rootJSON["ID"].toString() 30 val name = rootJSON["name"].toString() 31 val image = rootJSON["image"].toString().toByteArray() 32 val db = jsonDownloadDatabaseHelper(applicationContext).writableDatabase 33 val value = ContentValues() 34 value.put("_id", id) 35 value.put("name", name) 36 value.put("image", image) 37 db.insert("dataTable",null, value) 38 } 39 } 40 41
このクラスをonCreate()でexecute()しています。
すると、数秒後にアプリがクラッシュし、以下のようなエラーが出てきます。
E/AndroidRuntime: FATAL EXCEPTION: main Process: jp.wings.nikkeibp.imagedowload, PID: 3103 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: org.json.JSONException: Value [{"ID":"001","name":"桜","image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBkAGQAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz //...以下大量のbase64文字列
org.json.JSONExceptionとあるので、onPostExecute()の中の処理に問題があるのかと予想していますが、調べてもまだ腑に落ちる原因は見つけられずにいます。
ご教示頂けると助かります。宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/14 06:20