البرمجة

حفظ JSON في ملف باستخدام Java

تبدو المشكلة في كودك تكمن في استخدام المتغير result قبل تعريفه. في السطر الذي يلي استدعاء JsonObject json = new JsonObject();، حاول تحريك تعريف String result = ""; إلى أعلى الميثود showResult بحيث يكون قبل استخدامه في حلقة الـfor وأيضًا قبل إعلان المتغير JsonObject json = new JsonObject();.

في النهاية، يجب عليك أيضًا التأكد من تعيين قيمة للمتغير result بشكل صحيح داخل حلقة الـfor، وضمان أن كل تعليمة تنفذ بشكل صحيح داخل كتلة الـif المناسبة.

المزيد من المعلومات

بالطبع! في الكود الذي قدمته، يبدو أنك تحاول إنشاء ملف JSON يحتوي على بيانات من نوع Planet، حيث تقوم بتكرار الـfor للحصول على البيانات المحددة من plAdapter وتضمينها في كائن JsonObject.

ومن ثم، تحاول كتابة هذا الكائن JsonObject إلى ملف JSON على جهاز التخزين الخارجي باستخدام FileWriter. ولكن هناك بعض المشكلات في الكود:

  1. قبل الـfor loop، تقوم بتعريف String result = ""; وتعيين قيمة فارغة له. ولكن بعد ذلك، تقوم بتعريف String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/droidText/"; وتعيين قيمة للمتغير path، وبعدها تقوم بإنشاء FileWriter وكتابة النتيجة result إلى الملف، وهو ما يبدو غير منطقي.

  2. يجب عليك أن تنتهي من تكوين الـJsonObject قبل أن تحاول كتابته إلى الملف. يعني أن تضع كود كتابة الملف داخل حلقة الـfor بعد إنشاء الـJsonObject وإضافة البيانات إليه.

  3. يجب عليك أيضًا التأكد من أنه بعد كتابة الملف، يتم إغلاق FileWriter بشكل صحيح في كتلة finally لتجنب تسريب الموارد.

لحل المشكلة، قم بتعديل الكود ليكون مثل التالي:

java
public String showResult(View v) throws IOException { String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/droidText/"; FileWriter file = null; try { JsonObject json = new JsonObject(); for (Planet p : plAdapter.getBox()) { if (p.isSelected()){ json.put("name", p.getName()); json.put("distance", p.getDistance()); json.put("quantity", p.getQuantità()); } } file = new FileWriter(path + "filename.json"); file.write(json.toString()); } catch (IOException e) { e.printStackTrace(); } finally { if (file != null) { try { file.flush(); file.close(); } catch (IOException e) { e.printStackTrace(); } } } return ""; // return something meaningful here }

هذا التعديل يتيح لك بناء الـJsonObject بشكل صحيح داخل حلقة الـfor، ثم كتابته إلى الملف JSON بعد ذلك.

زر الذهاب إلى الأعلى