改行で区切られた 173,139 語を含むテキスト ファイルがあります。基本的に、簡単にアクセスできるように、この 1.7 MB ファイルを文字列の配列にロードする必要があります。onCreate()
アプリケーションの起動が非常に遅くなる可能性があるため、それ自体が問題を引き起こす可能性がありますが、今は辞書にロードしようとしているだけだと思います。
問題を調べたところ、この問題にはアセット マネージャーを使用する必要があることがわかったので、Dictionary クラスにあるものを次に示します。
public class Dictionary {
private String[] dictionary = new String[173139];
private String[] acceptedWordsList = new String[173139];
private String acceptedWords = "";
public Dictionary(Context context){
AssetManager am = context.getAssets();
try {
String rawText;
int element = 0;
InputStream is = am.open("words.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
while((rawText=reader.readLine()) != null){
dictionary[element++] = rawText;
}
} catch (IOException e) {
e.printStackTrace();
}
}
そして、クラスのほぼ最初の行で、メイン アクティビティのディクショナリをインスタンス化しています。
public class MainActivity extends Activity {
Dictionary dictionary = new Dictionary(this);
//rest of application code
}
ここで何が間違っていますか?私はまた、次のようにディクショナリをインスタンス化しようとしました:
Dictionary dictionary = new Dictionary(this.getApplicationContext());
としても:
Dictionary dictionary = new Dictionary(getApplicationContext());
しかし、これらはすべて私のアプリケーションで致命的なエラーを引き起こすようです。
最後に 2 つの質問があります。このようにアプリケーション コードの先頭でインスタンス化しても問題ないでしょうか? もしそうなら、私がそうしようとしているときにそのコードが機能しないのはなぜですか?
編集: logcat の出力を求められました。申し訳ありませんが、これは私の最初の「本物の」Android プログラムです。これがまさにあなたが探しているものかどうかはわかりませんが、役立つかもしれないものも省略したくありません。