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.