Android:在File中编写JsonArray的有效方法

时间:2015-04-13 06:28:22

标签: android json file filewriter

我在文件中编写JsonArray时遇到了一些问题。当我使用

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(destFile));      
out.writeObject(jarr);

抛出错误

 java.io.NotSerializableException: com.google.gson.JsonArray
    at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1344)
    at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
    at com.example.calljavascript.MainActivity.copyFile(MainActivity.java:281)
    at com.example.calljavascript.MainActivity.onResultRecived(MainActivity.java:191)
    at com.example.calljavascript.JavaScriptInterface.receiveValueFromJs(JavaScriptInterface.java:32)
    at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
    at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:53)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.os.HandlerThread.run(HandlerThread.java:61)

我也试过

FileWriter file = new FileWriter(destFile);
file.write(jarr.toString());

FileWriter,我们可以写jsonobject。因为我从几乎来源获得。我们可以在toString()之后编写jsonarray,而且我不能使用toString()来编写Jsonarray。因为toString()之后,我不能再使用那个json文件,这是什么问题?我无法得到它。

在将jsonarray转换为bytearray后,我也尝试了ByteArrayInputStream,但是没有成功读取json文件。

请告诉我一个有效的方法来编写JsonArray,其中不需要使用toString()

3 个答案:

答案 0 :(得分:0)

由于您使用的是GSON,因此您可以使用GSON Stream APIs来写入和读取文件。

答案 1 :(得分:0)

正如您的logcat跟踪说java.io.NotSerializableException: com.google.gson.JsonArrayJsonArray未实现Serializable,因此out.writeObject(jarr);无法运行。当您致电JsonArray.toString()时,String的结果会实现Serializable。并且JsonArray DO toString方法继承自Object。您可以致电out.writeObject(jarr.toString());JsonArray写入File

答案 2 :(得分:0)

请试试这个,它对我有用:

UserCredential credentials = new UserCredential();
    credentials.Subscriber = subscriber;
    credentials.Email = email;
    credentials.Password = password;
    Gson gson = new Gson();
    String json = gson.toJson(credentials);
    try 
    {
        FileOutputStream fos = context.openFileOutput(CredentialsFile, Context.MODE_PRIVATE);
        fos.write(json.getBytes());
        fos.close();
    } catch (Exception e)
    {
        Log.e("Credentials error ", e.getMessage());
    }