【问题标题】:Android : Effective way to write JsonArray in FileAndroid:在文件中写入 JsonArray 的有效方法
【发布时间】:2015-06-18 09:26:08
【问题描述】:

我在文件中写入 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()

【问题讨论】:

  • toString之后,不能再使用文件了吗?
  • @Olayinka,我有一些读取 json 文件的 NDK 工具,从那里抛出错误。我只有 .so 文件(c/c++ 类的编译)而不是 c 和 c++ 类,所以我不能在那里出错。
  • Andrioid JSON API 对我来说总是很有效。

标签: android json file filewriter


【解决方案1】:

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

【讨论】:

  • 该链接已损坏。请在您的答案中提供代码 sn-ps 而不仅仅是一个链接。
【解决方案2】:

正如您的 logcat 跟踪所说的 java.io.NotSerializableException: com.google.gson.JsonArrayJsonArray 没有实现 Serializable,所以 out.writeObject(jarr); 无法运行。而当你调用JsonArray.toString() 时,String 的结果实现了Serializable。而JsonArray DO 具有继承自ObjecttoString 方法。您可以致电out.writeObject(jarr.toString());JsonArray 写入File

【讨论】:

  • 他已经尝试过 toString 但没有帮助,因为他必须将文件读回对象中。
  • 那么你必须设置你的Object你想写入一个实现Serializable的文件,恐怕。
【解决方案3】:

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

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());
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2014-05-05
    • 1970-01-01
    • 2011-06-06
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多