تبدو المشكلة في كودك تكمن في استخدام المتغير result
قبل تعريفه. في السطر الذي يلي استدعاء JsonObject json = new JsonObject();
، حاول تحريك تعريف String result = "";
إلى أعلى الميثود showResult
بحيث يكون قبل استخدامه في حلقة الـfor
وأيضًا قبل إعلان المتغير JsonObject json = new JsonObject();
.
في النهاية، يجب عليك أيضًا التأكد من تعيين قيمة للمتغير result
بشكل صحيح داخل حلقة الـfor
، وضمان أن كل تعليمة تنفذ بشكل صحيح داخل كتلة الـif
المناسبة.
المزيد من المعلومات
بالطبع! في الكود الذي قدمته، يبدو أنك تحاول إنشاء ملف JSON يحتوي على بيانات من نوع Planet
، حيث تقوم بتكرار الـfor
للحصول على البيانات المحددة من plAdapter
وتضمينها في كائن JsonObject
.
ومن ثم، تحاول كتابة هذا الكائن JsonObject
إلى ملف JSON على جهاز التخزين الخارجي باستخدام FileWriter
. ولكن هناك بعض المشكلات في الكود:
-
قبل الـ
for
loop، تقوم بتعريفString result = "";
وتعيين قيمة فارغة له. ولكن بعد ذلك، تقوم بتعريفString path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/droidText/";
وتعيين قيمة للمتغيرpath
، وبعدها تقوم بإنشاءFileWriter
وكتابة النتيجةresult
إلى الملف، وهو ما يبدو غير منطقي. -
يجب عليك أن تنتهي من تكوين الـ
JsonObject
قبل أن تحاول كتابته إلى الملف. يعني أن تضع كود كتابة الملف داخل حلقة الـfor
بعد إنشاء الـJsonObject
وإضافة البيانات إليه. -
يجب عليك أيضًا التأكد من أنه بعد كتابة الملف، يتم إغلاق
FileWriter
بشكل صحيح في كتلةfinally
لتجنب تسريب الموارد.
لحل المشكلة، قم بتعديل الكود ليكون مثل التالي:
javapublic 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 بعد ذلك.