অ্যান্ড্রয়েড রুম ডাটাবেস: সত্তায় অ্যারেলিস্ট পরিচালনা করবেন কীভাবে?


90

আমি সবেমাত্র অফলাইনে ডেটা সংরক্ষণের জন্য ঘরটি প্রয়োগ করেছি। তবে একটি সত্তা শ্রেণিতে আমি নিম্নলিখিত ত্রুটিটি পাচ্ছি:

Error:(27, 30) error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.

এবং ক্লাসটি নিম্নলিখিত হিসাবে রয়েছে:

@Entity(tableName = "firstPageData")
public class MainActivityData {

    @PrimaryKey
    private String userId;

    @ColumnInfo(name = "item1_id")
    private String itemOneId;

    @ColumnInfo(name = "item2_id")
    private String itemTwoId;

    // THIS IS CAUSING THE ERROR... BASICALLY IT ISN'T READING ARRAYS
    @ColumnInfo(name = "mylist_array")
    private ArrayList<MyListItems> myListItems;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public ArrayList<MyListItems> getMyListItems() {
        return myListItems;
    }

    public void setCheckListItems(ArrayList<MyListItems> myListItems) {
        this.myListItems = myListItems;
    }

}

সুতরাং মূলত আমি ডাটাবেজে অ্যারেলিস্টটি সংরক্ষণ করতে চাই তবে আমি এর সাথে প্রাসঙ্গিক কিছু খুঁজে পাইনি। ঘর ব্যবহার করে কোনও অ্যারে কীভাবে সংরক্ষণ করবেন সে সম্পর্কে আপনি আমাকে গাইড করতে পারেন?

দ্রষ্টব্য: মাইলিস্টিমেটস পোজো ক্লাসে 2 টি স্ট্রিং রয়েছে (এখনকার হিসাবে)

আগাম ধন্যবাদ.

উত্তর:


82

অপশন # 1: আছে MyListItemsএকটি হতে @Entity, যেমন MainActivityDataহয়। MyListItemsএকটি @ForeignKeyপিছনে সেট আপ হবে MainActivityData। এই ক্ষেত্রে, যদিও, কক্ষের মতো MainActivityDataথাকতে পারে না private ArrayList<MyListItems> myListItems, সত্তাগুলি অন্যান্য সত্তাকে বোঝায় না। যদিও একটি ভিউ মডেল বা অনুরূপ POJO কনস্ট্রাক্টের একটি MainActivityDataএবং এর সম্পর্কিত থাকতে পারে ArrayList<MyListItems>

বিকল্প # 2: কিছু মৌলিক ধরণের (যেমন, একটি , যেমন স্টোরেজ ফর্ম্যাট হিসাবে JSON ব্যবহার করে) @TypeConverterরূপান্তর ArrayList<MyListItems>করার জন্য একজোড়া পদ্ধতির সেট আপ করুন String। এখন, MainActivityDataএটি ArrayList<MyListItems>সরাসরি থাকতে পারে। তবে এর জন্য আলাদা কোনও টেবিল থাকবে না MyListItemsএবং তাই আপনি MyListItemsখুব ভালভাবে প্রশ্ন করতে পারবেন না ।


ঠিক আছে, দ্রুত উত্তরের জন্য ধন্যবাদ। আমি প্রথমে ২ য় বিকল্প চেষ্টা করবো (১ ম বিকল্পটি টিবিএইচ হওয়ার জন্য সম্পূর্ণ পরিষ্কার নয় ..: ই) এবং আপনার কাছে ফিরে আসব।
তুষার গোগনা

4
অ্যারেলিস্ট -> স্ট্রিং (জসন ব্যবহার করে) এবং বিপরীতে দুর্দান্ত কাজ করেছে। বিটিডব্লিউ, আপনি কি আরও 1 ম বিকল্পটি আরও বিস্তৃত করতে পারেন? শুধু বিকল্প জানতে চান। যাই হোক ধন্যবাদ. :)
তুষার গোগনা

@TusharGogna: সম্পর্ক আচ্ছাদিত করা হয় রুম ডকুমেন্টেশন এবং বিট মধ্যে আবৃত হয় "সত্ত্বা অন্যান্য সত্তার সরাসরি পড়ুন না" রুম ডকুমেন্টেশন
কমন্সওয়্যার

4
ঠিক যেমন একটি নোট। উদাহরণস্বরূপ আপনি যদি ইন্টারের একটি তালিকা বজায় রাখতে চলেছেন, তবে আপনাকে এটি বিকল্প 2 এর স্ট্রিং হিসাবে ক্রমিককরণ করতে হবে এটি কোয়েরিকে আরও জটিল করে তুলেছে। আমি বরং বিকল্প 1 এ যাব কারণ কম "টাইপ" নির্ভরশীল।
axierjhtjz

4
ভবিষ্যতে কোনও সময় আপনাকে আপনার আইটেমগুলি জিজ্ঞাসা করতে হবে যাতে আমি সাধারণত # 1 বিকল্পটি দিয়ে যাব
জেফ্রি

112

প্রকার রূপান্তরকারী বিশেষভাবে এটির জন্য তৈরি করা হয়। আপনার ক্ষেত্রে, আপনি ডিবিতে ডেটা সঞ্চয় করতে নীচে প্রদত্ত কোড স্নিপেট ব্যবহার করতে পারেন।

public class Converters {
    @TypeConverter
    public static ArrayList<String> fromString(String value) {
        Type listType = new TypeToken<ArrayList<String>>() {}.getType();
        return new Gson().fromJson(value, listType);
    }

    @TypeConverter
    public static String fromArrayList(ArrayList<String> list) {
        Gson gson = new Gson();
        String json = gson.toJson(list);
        return json;
    }
}

এবং আপনার রুম ডিবিতে এই ক্লাসটি উল্লেখ করুন

@Database (entities = {MainActivityData.class},version = 1)
@TypeConverters({Converters.class})

আরও তথ্য এখানে


4
কেউ কি আমাকে তালিকা সহ কোটলিনে একই কাজ করতে সহায়তা করতে পারে। জাভাতে এটি ঠিকঠাক কাজ করছিল। তবে যখন আমি
কলিনে

4
আপনি কীভাবে এই অ্যারেলিস্ট থেকে জিজ্ঞাসা করবেন?
সানজোগ শ্রেষ্ঠ

@ সঞ্জোগশ্রেষ্ঠা আপনার অর্থ কী তা আমি বুঝতে পারি না। আপনি কেবল পান পদ্ধতিটি ব্যবহার করে অ্যারেলিস্ট এবং ক্যোয়ারী পুনরুদ্ধার করুন
অমিত ভান্ডারী

@ অমিতভান্ডারী উপরের দৃশ্যের উদাহরণ হিসাবে ধরুন। আমি সারণিটি (মেইনএকটিভিটি ডেটা) সন্ধান করতে চাই যেখানে মাইলিস্টিমেটসগুলিতে (যেমন, ক, খ, সি) এবং ইউজারআইডি এবিসি রয়েছে। এখন আমরা কীভাবে এ জাতীয় মামলার জন্য কোয়েরি লিখব?
সানজগ শ্রেষ্ঠ

4
পরামর্শটি দেওয়ার জন্য ধন্যবাদ যদিও এখানে এই উদাহরণটি কেবল চিত্রণ। সাধারণত আমরা সর্বদা অ্যাপ্লিকেশন স্তরে একটি জিএসএন উদাহরণ রাখি।
অমিত ভান্ডারী

55

প্রকার রূপান্তরকারী জন্য কোটলিন সংস্করণ:

 class Converters {

    @TypeConverter
    fun listToJson(value: List<JobWorkHistory>?) = Gson().toJson(value)

    @TypeConverter
    fun jsonToList(value: String) = Gson().fromJson(value, Array<JobWorkHistory>::class.java).toList()
}

আমি JobWorkHistoryআমার উদ্দেশ্যে অবজেক্টটি ব্যবহার করেছি, আপনার নিজের অবজেক্টটি ব্যবহার করুন

@Database(entities = arrayOf(JobDetailFile::class, JobResponse::class), version = 1)
@TypeConverters(Converters::class)
abstract class MyRoomDataBase : RoomDatabase() {
     abstract fun attachmentsDao(): AttachmentsDao
}

4
আমি মনে করি অ্যারে ডিজিটাইজ করা এবং তারপরে তালিকায় রূপান্তরিত হওয়ার পরিবর্তে এই জাতীয় তালিকার মতো ব্যবহার করা ভাল: ভাল তালিকা টাইপ = অবজেক্ট: টাইপটোকেন <লিস্ট <জব ওয়ার্ক হিস্টোরি>> () {} .আপনি নীচের উত্তরে উল্লিখিত টাইপ করুন।
সোহায়ব হাসুন

4
এছাড়াও, আপনি Gsonআপনার অ্যাপ্লিকেশন থেকে কোথাও থেকে ক্যাশেড উদাহরণ আনতে চাইতে পারেন । Gsonপ্রতিটি কলটিতে নতুন উদাহরণ শুরু করা ব্যয়বহুল হতে পারে।
অপ্সালিয়া

18

List<String>রূপান্তরকারী এর ভাল সংস্করণ

class StringListConverter {
    @TypeConverter
    fun fromString(stringListString: String): List<String> {
        return stringListString.split(",").map { it }
    }

    @TypeConverter
    fun toString(stringList: List<String>): String {
        return stringList.joinToString(separator = ",")
    }
}

6
"," বিভাজক হিসাবে কখনও কখনও আপনার স্ট্রিং একই চরিত্র থাকতে পারে এবং এটি একটি গোলমাল হতে পারে হিসাবে ব্যবহার সম্পর্কে সতর্ক থাকুন।
এমারশাহ

9

এইভাবে আমি তালিকা রূপান্তরটি পরিচালনা করি

public class GenreConverter {
@TypeConverter
public List<Integer> gettingListFromString(String genreIds) {
    List<Integer> list = new ArrayList<>();

    String[] array = genreIds.split(",");

    for (String s : array) {
       if (!s.isEmpty()) {
           list.add(Integer.parseInt(s));
       }
    }
    return list;
}

@TypeConverter
public String writingStringFromList(List<Integer> list) {
    String genreIds = "";
    for (int i : list) {
        genreIds += "," + i;
    }
    return genreIds;
}}

এবং তারপরে ডাটাবেসে আমি নীচে প্রদর্শিত হিসাবে করব

@Database(entities = {MovieEntry.class}, version = 1)
@TypeConverters(GenreConverter.class)

এবং নীচে এটির একটি কোটলিন বাস্তবায়ন রয়েছে;

class GenreConverter {
@TypeConverter
fun gettingListFromString(genreIds: String): List<Int> {
    val list = mutableListOf<Int>()

    val array = genreIds.split(",".toRegex()).dropLastWhile {
        it.isEmpty()
    }.toTypedArray()

    for (s in array) {
        if (s.isNotEmpty()) {
            list.add(s.toInt())
        }
    }
    return list
}

@TypeConverter
fun writingStringFromList(list: List<Int>): String {
    var genreIds=""
    for (i in list) genreIds += ",$i"
    return genreIds
}}

আমি এই সমাধানটি সহজ প্রকারের জন্য ব্যবহার করি (উদাহরণস্বরূপ তালিকা <তালিকা>> তালিকা <দীর্ঘ>) কারণ এটি জিএসএন-ভিত্তিক সমাধানগুলির চেয়ে হালকা।
জুলিয়ান ক্রোনেগ

4
এই সমাধানটি অসুখী প্রবাহকে মিস করে (যেমন নাল এবং খালি স্ট্রিং, নাল তালিকা)।
জুলিয়ান ক্রোনেগ

হ্যাঁ আমি এটি আটকানোর অনুলিপি করেছিলাম এবং একক কমা দিয়ে উপাদান তৈরি করার জন্য কমপক্ষে এক ঘন্টা হারিয়েছি hour আমি (কোটলিনে) এর একটি ঠিকঠাক সহ জমা দিয়ে উত্তর দিয়েছি
ড্যানিয়েল উইলসন

6

উপরে বর্ণিত হিসাবে একই ত্রুটি বার্তা ছিল। আমি যোগ করতে চাই: আপনি যদি একটি ক্রোয় বার্তাটি একটি @ কোয়েরিতে পেয়ে থাকেন তবে আপনার @ কিউরি টীকাগুলির উপরে @ টাইপ কনভার্টার যুক্ত করা উচিত।

উদাহরণ:

@TypeConverters(DateConverter.class)
@Query("update myTable set myDate=:myDate  where id = :myId")
void updateStats(int myId, Date myDate);

....

public class DateConverter {

    @TypeConverter
    public static Date toDate(Long timestamp) {
        return timestamp == null ? null : new Date(timestamp);
    }

    @TypeConverter
    public static Long toTimestamp(Date date) {
        return date == null ? null : date.getTime();
    }
}

4
আমি ক্যোয়ারী টীকাগুলির উপরে @ টাইপকন্টার্টার যুক্ত করার চেষ্টা করেছি, তবে আমি এখনও একই ত্রুটি পেয়ে যাচ্ছি
জুলকারনাইন শাহ

5

আমি ব্যক্তিগতভাবে @TypeConverters/ সিরিয়ালাইজেশনের বিরুদ্ধে পরামর্শ দেব , যেহেতু তারা ডাটাবেসের সাধারণ ফর্মগুলির সম্মতি ভঙ্গ করে।

এই বিশেষ ক্ষেত্রে এটি মূল্যবান হতে পারে @ রিলেশন টীকাগুলি ব্যবহার করে কোনও সম্পর্কটিকে সংজ্ঞায়িত করার উপযুক্ত , যা নেস্টেড সংস্থাগুলি কোনও একচেটিয়া ঘোষণায় @ForeignKeyএবং সমস্ত এসকিউএল কোয়েরি ম্যানুয়ালি লেখার অতিরিক্ত জটিলতা ছাড়াই কোনও একক বস্তুতে জিজ্ঞাসা করতে দেয় :

@Entity
public class MainActivityData {
    @PrimaryKey
    private String userId;
    private String itemOneId;
    private String itemTwoId;
}

@Entity
public class MyListItem {
    @PrimaryKey
    public int id;
    public String ownerUserId;
    public String text;
}

/* This is the class we use to define our relationship,
   which will also be used to return our query results.
   Note that it is not defined as an @Entity */
public class DataWithItems {
    @Embedded public MainActivityData data;
    @Relation(
        parentColumn = "userId"
        entityColumn = "ownerUserId"
    )
    public List<MyListItem> myListItems;
}

/* This is the DAO interface where we define the queries.
   Even though it looks like a single SELECT, Room performs
   two, therefore the @Transaction annotation is required */
@Dao
public interface ListItemsDao {
    @Transaction
    @Query("SELECT * FROM MainActivityData")
    public List<DataWithItems> getAllData();
}

এই 1-N উদাহরণটি বাদ দিয়ে, 1-1 এবং এনএম সম্পর্কগুলিও সংজ্ঞায়িত করা সম্ভব।


4

কোটলিনের সিরিয়ালাইজেশন উপাদান - কোটলিনেক্স.সিরিয়ালাইজেশন ব্যবহার করে নেটিভ কোটলিন সংস্করণ

  1. আপনার মধ্যে কোটলিন সিরিয়ালাইজেশন গ্রেডল প্লাগইন এবং নির্ভরতা যুক্ত করুন build.gradle:
apply plugin: 'kotlinx-serialization'

dependencies {
   ...
   implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1"
}
  1. আপনার রূপান্তরকারী শ্রেণিতে প্রকার রূপান্তরকারী যুক্ত করুন;
@TypeConverter
fun fromList(value : List<String>) = Json.encodeToString(value)

@TypeConverter
fun toList(value: String) = Json.decodeFromString<List<String>>(value)
  1. আপনার ডেটাবেস ক্লাসে আপনার রূপান্তরকারী ক্লাস যুক্ত করুন:
@TypeConverters(Converters::class)
abstract class YourDatabase: RoomDatabase() {...}

এবং তুমি করে ফেলেছ!

অতিরিক্ত সংস্থানগুলি:


3

এই উত্তরটি কোটিনকে কমা দ্বারা বিভক্ত করতে এবং কমা বর্ণিত স্ট্রিং তৈরি করতে ব্যবহার করে। কমাতে শেষ উপাদানটি বাদে সব শেষে যেতে হবে, সুতরাং এটি একক উপাদানগুলির তালিকাও পরিচালনা করবে handle

object StringListConverter {
        @TypeConverter
        @JvmStatic
        fun toList(strings: String): List<String> {
            val list = mutableListOf<String>()
            val array = strings.split(",")
            for (s in array) {
                list.add(s)
            }
            return list
        }

        @TypeConverter
        @JvmStatic
        fun toString(strings: List<String>): String {
            var result = ""
            strings.forEachIndexed { index, element ->
                result += element
                if(index != (strings.size-1)){
                    result += ","
                }
            }
            return result
        }
    }

2

আমার ক্ষেত্রে সমস্যা ছিল এই উত্তরটির জেনেরিক টাইপ বেস

https://stackoverflow.com/a/48480257/3675925 অ্যারেলিস্টের পরিবর্তে তালিকা ব্যবহার করুন

 import androidx.room.TypeConverter
 import com.google.gson.Gson 
 import com.google.gson.reflect.TypeToken
 class IntArrayListConverter {
     @TypeConverter
     fun fromString(value: String): List<Int> {
         val type = object: TypeToken<List<Int>>() {}.type
         return Gson().fromJson(value, type)
     }

     @TypeConverter
     fun fromArrayList(list: List<Int>): String {
         val type = object: TypeToken<List<Int>>() {}.type
         return Gson().toJson(list, type)
     } 
}

এজেন্ট ক্লাসে দাও ক্লাস বা ক্ষেত্রগুলি অনুসন্ধান করার জন্য @ টাইপকোনভার্টারস (ইন্টাআরলিস্টকনভার্টার :: শ্রেণি) যুক্ত করার প্রয়োজন নেই এবং কেবলমাত্র @TypeConverters (IntArrayListConverter :: শ্রেণী) ডাটাবেস শ্রেণিতে যুক্ত করুন

@Database(entities = [MyEntity::class], version = 1, exportSchema = false)
@TypeConverters(IntArrayListConverter::class)
abstract class MyDatabase : RoomDatabase() {

0

যুক্ত হচ্ছে @TypeConverters প্যারাম যেমন রূপান্তরকারী বর্গ সঙ্গে

ডেটাবেস এবং দাও ক্লাসে, আমার প্রশ্নের কাজ করে তোলে


4
আপনি কি আপনার উত্তরটি বিস্তারিত বলতে পারবেন ??
কে প্রদীপ কুমার রেড্ডি

0

জেসন রূপান্তরগুলি মেমরি বরাদ্দের ক্ষেত্রে খুব ভাল স্কেল করে না rather

class Converters {
    @TypeConverter
    fun stringAsStringList(strings: String?): List<String> {
        val list = mutableListOf<String>()
        strings
            ?.split(",")
            ?.forEach {
                list.add(it)
            }

        return list
    }

    @TypeConverter
    fun stringListAsString(strings: List<String>?): String {
        var result = ""
        strings?.forEach { element ->
            result += "$element,"
        }
        return result.removeSuffix(",")
    }
}

সহজ ধরনের তথ্য জন্য উপরে ব্যবহৃত হতে পারে অন্যথায় জটিল datatypes রুম প্রদান করে এমবেডেড


0

রুম ডিবি টেবিলটিতে কাস্টমঅবজেক্ট প্রকারগুলি যুক্ত করার উদাহরণ এখানে। https://mobikul.com/insert-custom-list-and-get-that-list-in-room-database- using-typeconverter/

প্রকারের রূপান্তরকারী যুক্ত করা সহজ ছিল, আমার কেবল এমন একটি পদ্ধতির দরকার ছিল যা অবজেক্টের তালিকাকে স্ট্রিংয়ে রূপান্তর করতে পারে এবং একটি পদ্ধতি যা বিপরীত করতে পারে। আমি এর জন্য জিএসএন ব্যবহার করেছি।

public class Converters {

    @TypeConverter
    public static String MyListItemListToString(List<MyListitem> list) {
        Gson gson = new Gson();
        return gson.toJson(list);
    }

    @TypeConverter
    public static List<Integer> stringToMyListItemList(@Nullable String data) {
        if (data == null) {
            return Collections.emptyList();
        }

        Type listType = new TypeToken<List<MyListItem>>() {}.getType();

        Gson gson = new Gson();
        return gson.fromJson(data, listType);
    }
}

আমি তখন সত্তায় মাঠে একটি টিকা যুক্ত করেছি:

@TypeConverters(Converters.class)

public final ArrayList<MyListItem> myListItems;

0

আমরা যখন টাইপ কনভার্টার ব্যবহার করি তখন ডেটাটাইপটি টাইপকনভার্টার পদ্ধতিতে রিটার্ন টাইপ হওয়া উচিত। উদাহরণ টাইপকনভার্টার পদ্ধতি রিটার্ন স্ট্রিং এর পরে সারণী কোলুম যুক্ত করা স্ট্রিং হওয়া উচিত

 private static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(@NonNull SupportSQLiteDatabase database) {
        // Since we didn't alter the table, there's nothing else to do here.
        database.execSQL("ALTER TABLE "+  Collection.TABLE_STATUS  + " ADD COLUMN deviceType TEXT;");
        database.execSQL("ALTER TABLE "+  Collection.TABLE_STATUS  + " ADD COLUMN inboxType TEXT;");
    }
};

0
 @Query("SELECT * FROM business_table")
 abstract List<DatabaseModels.Business> getBusinessInternal();


 @Transaction @Query("SELECT * FROM business_table")
 public ArrayList<DatabaseModels.Business> getBusiness(){
        return new ArrayList<>(getBusinessInternal());
 }

0

উপরের সমস্ত উত্তরগুলি স্ট্রিংয়ের তালিকার জন্য। তবে নীচে আপনাকে আপনার সামগ্রীর তালিকার জন্য রূপান্তরকারী খুঁজে পেতে সহায়তা করবে।

"আপনার ক্লাসনাম " এর জায়গায় , আপনার অবজেক্ট ক্লাস যুক্ত করুন।

 @TypeConverter
        public String fromValuesToList(ArrayList<**YourClassName**> value) {
            if (value== null) {
                return (null);
            }
            Gson gson = new Gson();
            Type type = new TypeToken<ArrayList<**YourClassName**>>() {}.getType();
            return gson.toJson(value, type);
        }
    
        @TypeConverter
        public ArrayList<**YourClassName**> toOptionValuesList(String value) {
            if (value== null) {
                return (null);
            }
            Gson gson = new Gson();
            Type type = new TypeToken<List<**YourClassName**>>() {
            }.getType();
            return gson.fromJson(value, type);
        }

0

উপরে সমস্ত উত্তর সঠিক। হ্যাঁ, আপনার যদি সত্যই কোনও এসকিউএলাইট ফিল্ডে টাইপ কনভার্টারের কোনও কিছুর অ্যারের প্রয়োজন হয় তবে এটি সমাধান।

এবং আমি আমার প্রকল্পগুলিতে স্বীকৃত উত্তরটি ব্যবহার করেছি।

তবে এটা করবেন না !!!

আপনার যদি 90% ক্ষেত্রে সত্তায় স্টোর অ্যারের প্রয়োজন হয় তবে আপনাকে এক থেকে একাধিক বা বহু থেকে বহু সম্পর্ক তৈরি করতে হবে।

অন্যথায়, এই অ্যারের ভিতরে কী সহ কিছু নির্বাচন করার জন্য আপনার পরবর্তী এসকিউএল কোয়েরিটি একেবারে নরক হবে ...

উদাহরণ:

অবজেক্ট foo json হিসাবে আসে: [{id: 1, নাম: "অ্যাবস"}, {আইডি: 2, নাম: "সিডি" ""

অবজেক্ট বার: [{আইডি, 1, foos: [1, 2], {...}]

সুতরাং সত্তা যেমন তৈরি করবেন না:

@Entity....
data class bar(
...
val foos: ArrayList<Int>)

পরবর্তী মত করুন:

@Entity(tablename="bar_foo", primaryKeys=["fooId", "barId"])
data class barFoo(val barId: Int, val fooId: Int)

এবং আপনার foos ঘা: [] এই টেবিল রেকর্ড হিসাবে।


অনুমান করবেন না যে আপনি যদি ইউপি প্রথম আইপি কলটিতে উপলব্ধ আইডিগুলির একটি তালিকা সংরক্ষণ করেছিলেন তবে পরেরটিতে নয়, তবে সেই উপায়ে আইডি কোথাও সংরক্ষণ করুন এবং তারপরে এপিআই স্টোরটিকে একটি জংশন টেবিলের সাথে একটি টেবিলে জিজ্ঞাসা করতে ব্যবহার করুন , এটি উভয় সমাধান ব্যবহার করে, আমি আপনার সাথে একমত
হই

-2

কক্ষ থেকে সরকারী সমাধান ব্যবহার করুন, @ এম্বেডড টিকা:

@Embedded(prefix = "mylist_array") private ArrayList<MyListItems> myListItems
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.