Leia JSON da pasta / assets em uma ArrayList no Android?

Primeiro, pesquisei muito essa questão. Eu aprendi a ler do meu arquivo de texto na pasta de ativos. O problema é que eu não quero acabar com uma string porque o arquivo é realmente um arraylist escrito usando json e dentro desse arraylist são objetos. Eu preciso acessar apenas um objeto. Aqui está o que eu quero dizer:

Eu tenho uma classe Book, que tem um int chamado capítulo, um int chamado título e um int chamado pageNum. Eu criei vários objetos Book e os adicionei a um ArrayList. Então usei o seguinte código para escrever meu ArrayList em um arquivo de texto (em um projeto java regular):

<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>

Esse código cria um arquivo de texto que eu coloco na pasta / assets em meu projeto Android porque quero incluí-lo no aplicativo. Em um projeto java que não seja Android, eu poderia simplesmente usar o seguinte código para preencher uma ArrayList para que eu pudesse analisar o Book que obtivesse 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>

O código json que estou usando vem do quickconnectfamily.org. Você precisa adicionar um arquivo chamado qc_json.jar ao caminho de construção do seu projeto.http://www.quickconnectfamily.org/qcjson/more.html

O problema no Android é quando eu leio o arquivo usando InputStream, eu só posso obter o arquivo inteiro em uma string, o código acima não funciona no Android. Eu não posso envolver JSONInputStreams em torno de um InputStream, apenas em torno de um FileInputStream. Mas parece que não consigo usar o FileInputStream.

Então, o que eu preciso é uma maneira de criar um ArrayList em vez de uma string no meu aplicativo Android. Sem dar muito sobre o meu aplicativo, o aplicativo basicamente gera um número aleatório e cria um objeto Book a partir desse índice na ArrayList. Em seguida, o usuário é questionado com informações desse livro específico. Soa bobo, mas o aplicativo real é muito mais legal.

Estou aberto a soluções, métodos alternativos de armazenamento de objetos em um arquivo de texto, etc. Por favor, não basta postar críticas sobre a minha gramática, sintaxe ou idéia de aplicação. Sou muito novo no desenvolvimento de aplicativos e não me importo com opiniões pessoais. Se alguém quiser ver mais código, posso enviá-lo, mas não parece necessário neste momento. Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion