質問編集履歴

1 個人情報けしました

telin

telin score 16

2018/11/16 09:49  投稿

Realmに画像を保存する方法 URlパスを指定する方法
Realmで作ったテーブルに画像を保存してimageViewに表示させたいのですがうまくいきません。
エラーメッセージ
Field "recipeImage" of type "android.graphics.Bitmap" is not supported.
これをどう解決すればよいのかわかりませんでした。
詳しい方ご教授ください。
```kotlin
package com.example.tamayamaryo.recipebook_sotuken  
import android.arch.lifecycle.Transformations.map
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.ListView
import io.realm.Realm
import io.realm.kotlin.createObject
import io.realm.kotlin.where
import java.util.*
import android.widget.SimpleAdapter
import io.realm.kotlin.delete
import kotlinx.android.synthetic.main.recipelayout.*
import java.io.ByteArrayOutputStream
import kotlin.collections.ArrayList
class MainActivity : AppCompatActivity() {
   private lateinit var realm: Realm
   override fun onCreate(savedInstanceState: Bundle?) {
       realm = Realm.getDefaultInstance()
       realm.executeTransaction() {
           val delete = realm.where<Recipe>().contains("recipeName" , "curry").findAll()
           delete.deleteAllFromRealm()
       }
       realm.beginTransaction()
       val bmp = BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher)
       realm.createObject<Recipe>(UUID.randomUUID().toString()).apply {
               recipeName = "curry"
               recipeHowtomake = "じゃがいも切って人参きって肉きって鍋に入れて水いれてカレールー入れて煮て終わりです。"
               recipeImage = bmp
       }
       realm.commitTransaction()
       var listView: ListView
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       listView = findViewById(R.id.listView)
       val Recipe = realm.where<Recipe>().findAll()
       listView?.adapter = RecipeAdapter(Recipe)
   }
//   fun createImageData() : ByteArray {
//       val bmp = (re_image.drawable as ).bmp
//       val baos = ByteArrayOutputStream()
//       bmp.compress(Bitmap.CompressFormat.PNG, 100, baos)
//       val imageByteArray = baos.toByteArray()
//       return imageByteArray
//
//           }
   override fun onDestroy() {
       super.onDestroy()
       realm.close()
   }
}
```
```kotlin
package com.example.tamayamaryo.recipebook_sotuken  
import android.graphics.Bitmap
import android.view.View
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import java.io.Serializable
open class Recipe : Serializable, RealmObject() {
   @PrimaryKey
   var recipeId: String? = null
   var recipeName: String? = null
   var recipeCategory: String? = null
   var recipeHowtomake: String? = null
   var recipeInfo: String? = null
   var recipeNinmae: Int = 0
   var recipePrice: Int = 0
   var recipeMaterial: String? = null
   var recipeImage: Bitmap? = null
   }
```
```kotlin
package com.example.tamayamaryo.recipebook_sotuken  
import android.graphics.Bitmap
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.ListView
import android.widget.TextView
import io.realm.OrderedRealmCollection
import io.realm.RealmBaseAdapter
import kotlinx.android.synthetic.main.recipelayout.view.*
class RecipeAdapter (data: OrderedRealmCollection<Recipe>?)
   : RealmBaseAdapter<Recipe>(data) {
   inner class ViewHolder(cell : View) {
       var recipeName = cell.findViewById<TextView>(R.id.re_name)
       var recipeHowtomake = cell.findViewById<TextView>(R.id.re_Howtomake)
       var recipeImage = cell.findViewById<ImageView>(R.id.re_image)
   }
   override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
       val view : View
       val viewHolder : ViewHolder
       when(convertView) {
           null -> {
               val inflater = LayoutInflater.from(parent?.context)
               view = inflater.inflate(R.layout.recipelayout,parent,false)
               viewHolder = ViewHolder(view)
               view.tag = viewHolder
           }
           else -> {
               view = convertView
               viewHolder = view.tag as ViewHolder
           }
       }
       adapterData?.run {
           val Recipe = get(position)
           viewHolder.recipeName.text = Recipe.recipeName
           viewHolder.recipeHowtomake.text = Recipe.recipeHowtomake
           viewHolder.recipeImage.setImageBitmap(Recipe.recipeImage)
       }
       return view
   }
}
```
  • Android Studio

    4896 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Kotlin

    818 questions

    Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

  • Realm

    298 questions

    RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る