كيفية تخزين البيانات في gson واستخدامها في room database في Android Studio
نريد الان عمل كلاس جديد يحمل التاريخ و الوقت الذي تمت فيه العمالية ولكن في class منفصل ويمكن ان نجعل هذا الكلاس يكون اوتوماتيك والاخر من يدخله المستخدم مثلا عندما يقوم بعمل ملاحظة يقوم بادخال البيانات الخاص به والمعلومات وبعد الموافقه على الملاحظه يظهر الوقت والتاريخ الذي تمت فيه وتكون بشكل تلقائي دون تدخل المستخدم ولعمل هذا سوف نقوم بعمل كلاس جديد يحمل date و time .
مجال تطوير تطبيقات الاندرويد او تطوير تطبيقات الموبايل عموما هو اكثر مجال نهتم به في موقعنا ونقدم له شروحات كثيرة جدا وذلك لاهميتة وايضا لانه قد يصبح مصدر دخل بالنسبة لك وقد تبحث عن شركة تطوير تطبيقات الجوال والعمل بها اذا كنت جيد في عملية تطوير تطبيقات الهواتف الذكية او العمل في مواقع الفري لانسر ومجال تطوير تطبيقات الاندرويد كبير وواسع ويجب عليك دائما التطور فيها ولا تثبت عند مستواك الحالي فهنالك دائما تحديثات واضافات جديدة تظهر باستمرار وليس تطوير تطبيقات الاندرويد بل اي مجال له علاقة بالكمبيوتر او البرمجة .
كثير منا يسعى الى تعلم البرمجة وخصوصا تطوير تطبيقات الاندرويد او تطوير المواقع سواء باستخدام الجافا سكريبت او HTML او Php او غيرة فهذين المجالين اكثر المجالات عليها طلب تعلم لاهميتهم وايضا لانك تستطيع تعلمهم بشكل اونلاين ونحن نقدم في موقعنا دورة جافا بسيطة جدا للبدء في هذا المجال وفي الايام المقبلة سوف نحاول ان نقدم شروحات ودروس في برمجة مواقع الويب لانه ايضا مجال مهم جدا ومتوفر له عديد من الدروس على الانترنت بالعربي عكس مجال تطوير تطبيقات الموبايل حيث لا يقتصر جي كودرس على تطوير تطبيقات الهواتف الذكية بل موقعنا يشمل تعلم البرمجة .
خطوات التعامل مع gson بواسطة room في اندرويد ستوديو .
code gson
NoteDetails.class
public class NoteDetails {
String date , time;
public NoteDetails(String date, String time) {
this.date = date;
this.time = time;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
بعد ذلك سوف تنتقل الى NoteEntity class لكي تعرف الكلاس الاخر وتضعه في كونستراكتور وعمل له getter & setter كما هو موضح بالصورة , في النهاية قم بعمل tostring لكي تشاهد جميع التفاصيل عندما تريد طباعتها في logi في النهاية .
انتقل الان الى MainActivity وجرب ان تقوم بعمل define للكلاس الجديد وارسل البيانات التي تريدها وهنا جعلناها كنص عادي على سبيل التجربة ومررنا تاريخ ووقت وبعدها قم بتمرير Object من NoteDetails الى noteEntityy وبعدها جربت ان تقوم بعمل Run وانظر الى النتائج , ستلاحظ ظهور Error والسبب هو ان room يجب ان تخزن البيانات في Table لذلك يجب ان نحول الاوامر الجديدة في gson وبعدها نحولها من gson وتخزنها الى NoteDetails لكي تستطيع استخدامها في اي مكان اخر .
في النهاية سوف نقوم بعمل logi لل noteEntity1.toString لكي نطبع جميع العناصر في list
NoteDetails noteDetails = new NoteDetails("2021/07/03","12:55 PM");
List<NoteEntity> noteEntityList = NoteDatabase.getInstance(this).noteDAO().getnote();
int size = noteEntityList.size();
Log.i(TAG, "room: "+size);
NoteEntity noteEntityy = new NoteEntity("ahmed","owner geecoders.com",1, noteDetails);
NoteDatabase.getInstance(MainActivity.this).noteDAO().insertNote(noteEntityy);
NoteDatabase.getInstance(this).noteDAO().insertNote(new NoteEntity("AM","Cs",2,noteDetails));
size=noteEntityList.size();
Log.i(TAG, "room: "+size);
for (NoteEntity noteEntity1 : noteEntityList) {
Log.i(TAG, "room: "+noteEntity1.toString());
}
الان قم بإنشاء class جديد باسم RoomConverter يقوم هذا الكلاس على عملية تحويل البيانات الى gson code لكي تستطيع استخدامها في اي مكان وسوف نقوم بتحويل الكود الى gson وبعدها تحوليه الى class الخاص بها وقد سبق وان شرحنا هذا الكلام في shared من قبل وهي نفس الطريقة تقريبا ولكن لا تنسى ان تضع له رمز TypeConverter
RoomConverter.class
@TypeConverter
public String setNoteDetails(NoteDetails noteDetails) {
return new Gson().toJson(noteDetails);
}
@TypeConverter
public NoteDetails getNoteDetails(String gson) {
return new Gson().fromJson(gson, NoteDetails.class);
}
اخر خطوة انتقل الى NoteDatabase وقم بعمل @TypeConverters(RoomConverter.class) لكي يستقبل لان room كما شرحنا لكم من اساسياته توفر ترميز للعناصر وكلاس NoteDatabase وهو المسؤول عن جميع العمليات السابقة بشكل كبير .
NoteDatabase.class
@Database(entities = NoteEntity.class, version = 1, exportSchema = false)
@TypeConverters(RoomConverter.class)
public abstract class NoteDatabase extends RoomDatabase {
private static NoteDatabase instance;
public abstract NoteDAO noteDAO();
public static NoteDatabase getInstance(Context context) {
if (instance == null) {
instance = Room.databaseBuilder(context, NoteDatabase.class, "NoteDatabase").allowMainThreadQueries().
build();
}
return instance;
}
}
ولمزيد من الاكواد البرمجية حول برمجة وتطوير تطبيقات الاندرويد وتخزين البيانات بشكل اوفلاين يمكنك مشاهدة المقالات التالية :-