Json не записывается в файл - PullRequest
0 голосов
/ 10 июля 2019

Я взял данные из editText и пытаюсь записать его текст в файл json. Когда я выполняю код, он работает без каких-либо ошибок. Но когда я снова пытаюсь прочитать файл json, у него нет ранее записанных объектов.

Я пробовал использовать разных авторов, таких как BufferedWriter, FileWriter. Ни один из них не работает.

Это метод writeToJsonFile


void writeJsonFile(TextView textView) {
        String json;
        try {
            InputStream is = context.getAssets().open("chores.json");
            int size = is.available();
            byte[] buffer = new byte[size];
            if (is.read(buffer) == -1) {
                throw new EOFException();
            }
            is.close();
            json = new String(buffer, StandardCharsets.UTF_8);

            JSONObject obj = new JSONObject(json);
            JSONObject m_jArray = obj.getJSONObject("chores");
            JSONArray jsonArray = m_jArray.getJSONArray(title);

            JSONObject new_jobj = new JSONObject();
            new_jobj.put("task", textView.getText());
            new_jobj.put("isCompleted", false);

            jsonArray.put(new_jobj);

            File file = new File(context.getExternalFilesDir("/assets"), "chores.json");
            writeJsonFile(file, obj);
            Log.i("Done => ", "Written to file");


        } catch (EOFException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Эта функция принимает файл и объект json и записывает объект json в файл


public static void writeJsonFile(File file, JSONObject json) throws IOException {
    FileWriter fileWriter = new FileWriter(file);
    fileWriter.write(json.toString());
    if (fileWriter != null) {
        fileWriter.close();
    }
}

Я ожидаю, что он запишет в файл строку json, но в следующий раз, когда я снова прочитал файл с помощью InputStream, он не показывает ранее добавленный объект.

Ожидаемые хлопоты.json

{
  "chores": {
    "Daily": [
      {
        "task": "Task 1",
        "isCompleted": false
      }

    ],
    "Weekly": [

    ],
    "Monthly": [

    ],
    "Custom": [

    ]
  }
}

результирующий JSON

{
  "chores": {
    "Daily": [

    ],
    "Weekly": [

    ],
    "Monthly": [

    ],
    "Custom": [

    ]
  }
}

Ответы [ 3 ]

0 голосов
/ 10 июля 2019

Вы не записываете вновь созданный объект в файл: например:

        ...
        JSONObject new_jobj = new JSONObject();
        new_jobj.put("task", textView.getText());
        new_jobj.put("isCompleted", false);

        jsonArray.put(new_jobj);

        File file = new File(context.getExternalFilesDir("/assets"), "chores.json");
        // here instead of old obj write newly created new_jobj to file.

        writeJsonFile(file, new_jobj);
        Log.i("Done => ", "Written to file");
        ...
0 голосов
/ 10 июля 2019

Перед этим убедитесь, что у вас есть read and write storage permisions ....

Ex.

try 
{
    Writer output = null;
    File file = new File("filePath");
    if (!file.getParentFile().exists()) {
        file.getParentFile().mkdirs();
    }
    if (!file.exists()) {
        file.createNewFile();
    }
    output = new BufferedWriter(new FileWriter(file));
    output.write(jsonObject.toString());
    output.close();
} catch (Exception e) {
    e.printStackTrace();
}
0 голосов
/ 10 июля 2019

Вы можете использовать свойство append в конструкторе FileWriter. Можешь попробовать.

FileWriter fileWriter = new FileWriter(file,true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...