まず、私はこの質問をよく調べました。assets フォルダーにあるテキスト ファイルから読み取る方法を学びました。問題は、ファイルが実際にはjsonを使用して記述された配列リストであり、その配列リスト内にオブジェクトがあるため、文字列で終わりたくないことです。1 つのオブジェクトにのみアクセスする必要があります。これが私が意味することです:
章と呼ばれる int、タイトルと呼ばれる int、および pageNum と呼ばれる int を持つ Book クラスがあります。いくつかの 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();
このコードはテキスト ファイルを作成し、それをアプリに含めたいので、Android プロジェクトの /assets フォルダーに配置します。Android 以外の Java プロジェクトでは、次のコードを使用して ArrayList を再設定し、特定のインデックスから Book オブジェクトを解析できます。
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 オブジェクトを作成します。次に、ユーザーはその特定の本からの情報についてクイズを受けます。ばかげているように聞こえますが、実際のアプリはもっとクールです。
私は解決策、オブジェクトをテキスト ファイルに保存する代替方法などに対してオープンです。私の文法、構文、またはアプリケーションのアイデアについて単に批判を投稿しないでください。私はアプリ開発にかなり慣れていないので、個人的な意見は気にしません。もっと多くのコードを見たい人がいればアップロードできますが、現時点では必要ないようです。ありがとう。