JSONObject no serializable?

Estoy intentando serializar un ArrayList de JSONObjects. Pero tengo el error:

05-07 01:04:24.130: WARN/System.err(913): java.io.NotSerializableException: org.json.JSONObject 05-07 01:04:24.130: WARN/System.err(913): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1535) 05-07 01:04:24.130: WARN/System.err(913): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847) 05-07 01:04:24.130: WARN/System.err(913): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689) 05-07 01:04:24.130: WARN/System.err(913): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653) 05-07 01:04:24.130: WARN/System.err(913): at java.util.ArrayList.writeObject(ArrayList.java:651) 05-07 01:04:24.130: WARN/System.err(913): at java.lang.reflect.Method.invokeNative(Native Method) 05-07 01:04:24.130: WARN/System.err(913): at java.lang.reflect.Method.invoke(Method.java:507) 05-07 01:04:24.130: WARN/System.err(913): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1219) 05-07 01:04:24.130: WARN/System.err(913): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575) 05-07 01:04:24.130: WARN/System.err(913): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847) 05-07 01:04:24.130: WARN/System.err(913): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689) 05-07 01:04:24.130: WARN/System.err(913): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653) 05-07 01:04:24.130: WARN/System.err(913): at org.stocktwits.activity.AddStocksActivity.serializeQuotes(AddStocksActivity.java:183) 05-07 01:04:24.130: WARN/System.err(913): at org.stocktwits.activity.AddStocksActivity.access$9(AddStocksActivity.java:178) 05-07 01:04:24.130: WARN/System.err(913): at org.stocktwits.activity.AddStocksActivity$2.onItemClick(AddStocksActivity.java:146) 05-07 01:04:24.130: WARN/System.err(913): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 05-07 01:04:24.130: WARN/System.err(913): at android.widget.ListView.performItemClick(ListView.java:3513) 05-07 01:04:24.130: WARN/System.err(913): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812) 05-07 01:04:24.130: WARN/System.err(913): at android.os.Handler.handleCallback(Handler.java:587) 05-07 01:04:24.130: WARN/System.err(913): at android.os.Handler.dispatchMessage(Handler.java:92) 05-07 01:04:24.130: WARN/System.err(913): at android.os.Looper.loop(Looper.java:130) 05-07 01:04:24.130: WARN/System.err(913): at android.app.ActivityThread.main(ActivityThread.java:3683) 05-07 01:04:24.130: WARN/System.err(913): at java.lang.reflect.Method.invokeNative(Native Method) 05-07 01:04:24.130: WARN/System.err(913): at java.lang.reflect.Method.invoke(Method.java:507) 05-07 01:04:24.130: WARN/System.err(913): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 05-07 01:04:24.130: WARN/System.err(913): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 05-07 01:04:24.130: WARN/System.err(913): at dalvik.system.NativeStart.main(Native Method) 

Aquí está mi código serializar y deserializar:

 private void serializeQuotes() { FileOutputStream fos; try { fos = openFileOutput(Constants.FILENAME, Context.MODE_PRIVATE); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(quotes); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") private void deserializeQuotes() { try { FileInputStream fis = openFileInput(Constants.FILENAME); ObjectInputStream ois = new ObjectInputStream(fis); quotes = (ArrayList<JSONObject>) ois.readObject(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } 

4 Solutions collect form web for “JSONObject no serializable?”

Amigo, es JSON. ¿Por qué no sólo serializarlo como JSON, en lugar de como un objeto Java de tipo JSONObject?

Por ejemplo:

String myJsonObjectSerialized = myJsonObject.toString();

En el caso de que todavía quiera la serialización integrada de Java sin tener que recurrir a ordenar su objeto JSON en la notación de cadena, una cosa que podría hacer es extender JSONObject y JSONArray desde org.json e implementar Serializable.

A continuación, puede utilizar sus propias versiones de JSONObject y JSONArray en toda la tabla en lugar de los originales.

Asegúrese de definir todos los constructores en sus subclases y llamar a sus contrapartes super (), así como implementar métodos específicos que devuelven los tipos primarios como getJSONObject () y getJSONArray () de las propiedades.

Si tiene JSONArray dentro de la clase de objeto Serializable intente inicializar JSONArray de esta manera.

Transitorio privado JSONArray jsonArray;

 public class Person implements Serializable { private String name; private transient JSONArray jsonArray; public String getName() { return name; } public void setName(String name) { this.name = name; } public JSONArray getJsonArray() { return jsonArray; } public void setJsonArray(JSONArray jsonArray) { this.jsonArray = jsonArray; } } 

Otra forma es intercambiar la biblioteca org.json con json-simple .

La clase JSONObject de json-simple extiende HashMap que es java Serializable, así como más java-ish API.

Maven dependencia:

http://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple/1.1.1

Ejemplo de uso:

https://www.mkyong.com/java/json-simple-example-read-and-write-json/

  • Serializar objeto para enviar dentro de Intent en Android
  • Cómo serializar doble valor utilizando kSOAP en Android
  • Guardar matriz de objetos personalizados en estado de instancia
  • Android Realm - Objeto de Realm de paso usando Intent
  • ¿Recomendaciones para datos persistentes en Android?
  • ¿Se limpia la actividad de Android instanceState durante la actualización de la aplicación?
  • Java.lang.RuntimeException: Paralleable encontró IOException escribiendo objeto serializable en Android que pasa el objeto ArrayList
  • Serializar un objeto Drawable en Android
  • ¿Cómo puedo conservar un objeto complejo a través de Reiniciar actividades?
  • Ahorro de grandes arreglos cortos android
  • Serialización y des-serialización de android.graphics.Bitmap en Java
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.