اذهب إلى المحتوى

السؤال

نشر

السلام عليكم، أنشأت تطبيق ليستقبل صورة لكل جهة اتصال تضيفها يدويا ثم يتم تخزينها قي قاعدة بيانات Sqlite ولكن واجهتني مشكلة حيث أضفت الصورة الأولى والبرنامج يعمل بشكل صحيح ثم أضفت الثانية وبدأ يخرج من البرنامج كلما حاولت الدخول ماهو الحل هذه صورة توضيحية، شكرا لكمScreenshot_20220420_020122_com.example.gcontactq.thumb.jpg.6deb8d4a81b80c0405e5af42035b30df.jpg

Recommended Posts

  • 1
نشر

لا ينصح بتخزين الصور كما هي ضمن قواعد البيانات لعدة أسباب ومنها الحجم، كما أن Sqlite هي قاعدة بيانات خفيفة (من اسمها) وبالتالي لا ينصح أيضاً باستخدامها لتخزين البيانات الثقيلة أو للعمليات الكبيرة.

فحتى لو قمت باتباع آلية معينة لضغط الصورة قبل حفظها، من الممكن تجاوز الحد المسموح في Cursor Window وهو عادةً 4MB فقط.

لذلك الحل الأفضل هو بتخزين الصورة بشكل محلي أو على خادم ويب وحفظ مسار الصورة فقط ضمن قاعدة البيانات، وبالتالي بدلاً من تخزين صورة بحجم كبير سيتم تخزين سلسلة نصية تعبّر عن مسار وجود الصورة لاستعادتها ضمن التطبيق وإظهارها.

public void updateImage(long imageId, Bitmap picture) {
   //يتم تخزين الصورة بشكل محلي مع رقم معرّف فريد لكل صورة لتجنب مشكلة أكثر من ملف بنفس الاسم

   String picturePath = "";
   File internalStorage = mContext.getDir("MyPictures", Context.MODE_PRIVATE);
   File reportFilePath = new File(internalStorage, reportId + ".png");
   String picturePath = reportFilePath.toString();

   FileOutputStream fos = null;
   try {
      fos = new FileOutputStream(reportFilePath);
      picture.compress(Bitmap.CompressFormat.PNG, 100, fos);
      fos.close();
      }
   catch (Exception ex) {
      Log.i("Problem updating picture", ex);
      picturePath = "";
      }

   //تعديل مسار حفظ الصورة في قاعدة البيانات من خلال الرقم المعرّف الفريد
   SQLiteDatabase db = getWritableDatabase();

   ContentValues newPictureValue = new ContentValues();
   newPictureValue.put(Images.ImageEntry.COLUMN_PICTURE_TITLE, 
                       picturePath);

   db.update(Images.TABLE_NAME,
             newPictureValue,
             Images.ImageEntry._ID + "=?",
             new String[]{String.valueOf(imageId)});
   }
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...