¿Leer JSON de la carpeta / asset en una ArrayList en Android?

En primer lugar, he investigado mucho esta pregunta. Aprendí a leer desde mi archivo de texto en la carpeta de activos. El problema es que no quiero terminar con una cadena porque el archivo es en realidad un arraylist escrito con json y dentro de esa arraylist son objetos. Necesito acceder a un solo objeto. Esto es lo que quiero decir:

Tengo una clase de libro, que tiene un capítulo llamado int, un título llamado int y un número llamado pageNum. Creé varios objetos de Libro y los agregué a un ArrayList. Luego utilicé el siguiente código para escribir mi ArrayList en un archivo de texto (en un proyecto java normal):

<code>ArrayList<Book> aList = new ArrayList<Book>();
aList.add(book1);
//etc...add more Book objects here...

File aFile = new File("books.txt");
FileOutputStream aFileStream = new FileOutputStream(aFile);
JSONOutputStream jsonOut = new JSONOutputStream(aFileStream);
jsonOut.writeObject(aList);
jsonOut.close();
</code>

Ese código crea un archivo de texto que luego coloco en la carpeta / asset en mi proyecto de Android porque quiero que se incluya con la aplicación. En un proyecto java que no sea de Android, simplemente podría usar el siguiente código para volver a llenar una ArrayList para poder analizar objetos de libro de índices específicos:

<code>File bFile = new File("books.txt");
FileInputStream bFileStream = new FileInputStream(bFile);
JSONInputStream jsonIn = new JSONInputStream(bFileStream);
Arraylist<Book> bList = (ArrayList<Book>) jsonIn.readObject();
Book aBook = bList.get(253); //some arbitrary index
</code>

El código json que estoy usando proviene de quickconnectfamily.org. Debe agregar un archivo llamado qc_json.jar a la ruta de compilación de su proyecto.http://www.quickconnectfamily.org/qcjson/more.html

El problema en Android es que cuando leo el archivo con InputStream, solo puedo obtener el archivo completo en una cadena, el código anterior no funciona en Android. No puedo ajustar JSONInputStreams alrededor de un InputStream, solo alrededor de un FileInputStream. Pero parece que no puedo usar FileInputStream.

Entonces, lo que necesito es una forma de crear un ArrayList en lugar de una cadena en mi aplicación de Android. Sin revelar demasiado sobre mi aplicación, la aplicación básicamente genera un número aleatorio y crea un objeto Libro a partir de ese índice en el ArrayList. Entonces el usuario es interrogado con información de ese libro específico. Suena tonto, pero la aplicación real es mucho más genial.

Estoy abierto a soluciones, métodos alternativos de almacenamiento de objetos en un archivo de texto, etc. No se limite a publicar críticas sobre mi gramática, sintaxis o idea de aplicación. Soy bastante nuevo en el desarrollo de aplicaciones y no me importan las opiniones personales. Si alguien quiere ver más código, puedo subirlo, pero no parece necesario en este momento. Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta