简体   繁体   English

ANDROID:如何将数据插入JSON文件并将其保存到本地存储中?

[英]ANDROID: How to insert data to JSON file and save it to local storage?

So I am planning to store the data that I inputted to a JSON file and I want that JSON file to be stored to my phone's local storage. 因此,我打算将输入的数据存储到JSON文件中,并且希望将该JSON文件存储到手机的本地存储中。 But I have this error in my code. 但是我的代码中有这个错误。 It's about the JsonWriter. 关于JsonWriter。 Can anyone help me? 谁能帮我?

// THIS IS MY CODE

private void writeToFile(OutputStream out, List<Wordbank> wordList) throws IOException{
    JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));
    writer.setIndent(" ");
    writeWordbankArray(writer, wordList);
    writer.close();
}

public void writeWordbankArray(JsonWriter writer, List<Wordbank> wordList) throws  IOException{
    writer.beginArray();
    for(Wordbank wl : wordList){
        writeWordbank(writer, wl);
    }
    writer.endArray();
}

public void writeWordbank(JsonWriter writer, Wordbank wordbank) throws IOException{
    writer.beginObject();
    writer.name("English").value(wordbank.getEnglish());
    writer.name("Cebuano").value(wordbank.getCebuano());
    writer.name("Pronounciation").value(wordbank.getPronounciation());
    writer.name("POS").value(wordbank.getPos());
    writer.name("Audio").value(wordbank.getAudio());
    if(wordbank.getImage() != null || wordbank.getFx() != null){
        writer.name("Picture").value(wordbank.getImage());
        writer.name("Effect").value(wordbank.getFx());
    }else{
        writer.name("No name").nullValue();
    }
    writer.endObject();
}

// BELOW IS THE ERROR //错误在下面

2018-10-18 18:48:52.372 4965-4965/com.example.sampleFile/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sampleFile, PID: 4965
java.lang.NullPointerException
    at java.io.Writer.<init>(Writer.java:88)
    at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:97)
    at com.example.sampleFile.backend.AddData.writeToFile(AddData.java:518)
    at com.example.sampleFile.backend.AddData.access$500(AddData.java:61)
    at com.example.sampleFile.backend.AddData$15.onSuccess(AddData.java:460)
    at com.example.sampleFile.backend.AddData$15.onSuccess(AddData.java:453)
    at com.google.firebase.storage.StorageTask.zza(com.google.firebase:firebase-storage@@16.0.2:123)
    at com.google.firebase.storage.zze.zza(Unknown Source:6)
    at com.google.firebase.storage.zzv.zza(com.google.firebase:firebase-storage@@16.0.2:89)
    at com.google.firebase.storage.zzy.run(Unknown Source:6)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Above is the error. 以上是错误。 I need help with this, please HELP ME! 我需要帮助,请帮助我!

try {
            File file = new File("<storage location>" + filename + ".json");
            Writer writer = new BufferedWriter(new FileWriter(file));
            writer.write(jsonObject.toString());
            writer.close();

        } catch (Exception e) {
            Log.e("File Exception: ", e.getMessage());
        }

There is another approach that you can use. 您可以使用另一种方法。 The following code 以下代码

writer.name("English").value(wordbank.getEnglish());
writer.name("Cebuano").value(wordbank.getCebuano());
writer.name("Pronounciation").value(wordbank.getPronounciation());
writer.name("POS").value(wordbank.getPos());
writer.name("Audio").value(wordbank.getAudio());
if(wordbank.getImage() != null || wordbank.getFx() != null){
    writer.name("Picture").value(wordbank.getImage());
    writer.name("Effect").value(wordbank.getFx());
}else{
    writer.name("No name").nullValue();
}

tells me that you already know what to expect, you can make a POJO class and use Gson library to parse that POJO object into a string in JSON format. 告诉我您已经知道会发生什么,您可以创建一个POJO类并使用Gson库将该POJO对象解析为JSON格式的字符串。 Which later you can use as 以后可以用作

JSONObject jsonObj = new JSONObject(Jsonstring);

Here's an example 这是一个例子

ModelPOJO modelPojo = new ModelPojo();
modelPojo.setEnglish("value");

Gson gson = new Gson();
String jsonString = gson.toJson(modelPojo);

jsonString is the required String. jsonString是必需的字符串。 For writing it to the local storage you can take @jake breen's approach. 要将其写入本地存储,可以采用@jake breen的方法。

Hope it helps ! 希望能帮助到你 ! :) :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM