3

I want to use paging in room But I can not. Because I use multimap and it return map. When I use these technology together, I get this error :

error: Not sure how to convert a Cursor to this method's return type

Here is my code :

@Query("SELECT * FROM table_1 JOIN table_2 ON table_1.domain = table_2.domain)
DataSource.Factory<Integer, Map<Table1Entity, Table2Entity>> getAllData();
Javad Shirkhani
  • 343
  • 6
  • 11

1 Answers1

0

I had the same problem, but as a result I had to revise the tables and use the advice of Mbuodile Obiosio.

I have something like this json response:

{
        "id": 1,
        "parent_data": "...",
        "child_data": [
        {
            "id": 2,
            "parent_id": 1,
            "mediaFiles": [
            {
                "mediaFile": "http://127.0.0.1:8000/media/picture1.png"
            },
            {
                "mediaFile": "http://127.0.0.1:8000/media/picture2.png"
            }
            ]
        }
        ]
    }

Using TypeConverter, the nested data was converted to Json.

class ChildConverter{
   @TypeConverter
   fun toString(items: List<ChildModel>): String = Gson().toJson(items)

   @TypeConverter
   fun toChildModel(json: String): List<ChildModel>
   {
      val type: Type = object : TypeToken<List<ChildModel>>(){}.type
      return Gson().fromJson(json, type)
   }
}

class MediaFilesConverter{
   @TypeConverter
   fun toString(items: List<MediaFilesModel>): String = Gson().toJson(items)

   @TypeConverter
   fun toMedia(json: String): List<MediaFilesModel>
   {
      val type: Type = object : TypeToken<List<MediaFilesModel>>(){}.type
      return Gson().fromJson(json, type)
   }
}

Data class:

@Entity(tableName = "parent")
data class ParentData (
   @PrimaryKey
   @field:SerializedName("id") val id: Int,
   @field:SerializedName("parent_data") val parent_data: String,
   @TypeConverters(ChildConverter::class)
   @field:SerializedName("child_data") var child_data: List<ChildData>
)

data class ChildData(
   @SerializedName("id") val id: Int,
   @SerializedName("parent_id") val parent_id: Int,
   @TypeConverters(MediaFilesConverter::class)
   @SerializedName("mediaFiles") var media: List<MediaFile>
)

data class MediaFile(
   @SerializedName("mediaFile")
   val mediaURL: String
)

Dao:

@Query("SELECT * FROM parent")
fun getParentList(): PagingSource<Int, ParentData>

Database:

@Database(entities = [ParentData::class, ...],
        version = 1,
        exportSchema = false)
@TypeConverters(
        ChildConverter::class,
        MediaFilesConverter::class)
abstract class MyDataBase: RoomDatabase() 
{...}
Lyubov
  • 31
  • 3