首先,我研究了很多這個問題。我學會了如何從資產文件夾中的文本文件讀取數據。問題是,我不想結束一個字符串,因爲該文件實際上是一個使用json編寫的arraylist,並且裏面的arraylist是對象。我只需要訪問一個對象。我的意思是:從/ assets文件夾中讀取JSON到Android中的ArrayList?
我有一個Book類,它有一個叫做章的int,一個叫做title的int和一個叫做pageNum的int。我創建了幾個Book對象並將它們添加到ArrayList中。然後我用下面的代碼來寫我的ArrayList到一個文本文件(在常規的Java項目):
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();
該代碼創建一個文本文件,然後我放到/ assets文件夾在我的Android項目,因爲我希望它包含在應用程序中。在非Android的Java項目,我可以簡單地使用下面的代碼重新填充一個ArrayList,這樣我可以從具體指標解析書obects:
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
我使用JSON代碼來自quickconnectfamily.org。您必須將名爲qc_json.jar的文件添加到項目的構建路徑中。 http://www.quickconnectfamily.org/qcjson/more.html
Android中的問題是當我使用InputStream讀取文件時,我只能將整個文件轉換爲字符串,上面的代碼在Android中不起作用。我無法將JSONInputStreams包裝在InputStream中,只能圍繞FileInputStream。但似乎我無法使用 FileInputStream。
所以我需要的是一種在我的Android應用程序中創建ArrayList而不是字符串的方法。 沒有放棄太多關於我的應用程序,應用程序基本上會生成一個隨機數並從ArrayList中的該索引創建一個Book對象。然後用該特定書籍的信息來詢問用戶。聽起來很愚蠢,但真正的應用程序更酷。
我對解決方案,將對象存儲在文本文件等中的替代方法持開放態度。請不要簡單地發表關於我的語法,語法或應用程序想法的批評。我對應用程序開發非常陌生,我也不太在意個人意見。如果有人想看 更多的代碼,我可以上傳它,但在這一點上似乎沒有必要。謝謝。
嗯,似乎像[文檔狀態](http://www.quickconnectfamily.org/qcjson/docs/org/quickconnect/json/JSONInputStream.html),一個普通的'InputStream'是有效的......當然,你可以使用另一個庫(例如Jackson),或者使用SQLite DB。 – dmon
您可以以字符串形式讀取文件,並使用gson將其反序列化爲對象。 https://sites.google。com/site/gson/gson-user-guide#TOC-Collections-Examples –
我試過傑克遜,但是我不斷收到一個classCastException。感謝您的幫助,但我確實找到了解決方案,並將其作爲答案發布。 –