我有一个文本文件,其中包含由换行符分隔的 173,139 个单词。基本上,我需要将这个 1.7mb 文件加载到字符串数组中,以便于访问。我试图在主 Activity 的 onCreate() 中执行此操作,这可能会导致其自身的问题,因为它可能会使应用程序的启动速度非常慢,但现在我只是尝试加载我想在字典里。
我查了一下问题,发现我应该使用 Assets 管理器来解决这个问题,所以这是我的 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();
}
}
我在我的主要 Activity 中实例化了一个字典,几乎在类的第一行:
public class MainActivity extends Activity {
Dictionary dictionary = new Dictionary(this);
//rest of application code
}
我在这里做错了什么?我也尝试过像这样实例化字典:
字典dictionary = new Dictionary(this.getApplicationContext());
以及:
字典dictionary = new Dictionary(getApplicationContext());
但所有这些似乎都会在我的应用程序中导致 fatal error 。
最后两个问题:可以像这样在应用程序代码的开头实例化吗?如果是这样,为什么当我尝试这样做时该代码不起作用?
编辑:我被要求提供 logcat 输出。抱歉,这是我的第一个“真正的”Android 程序。我不知道这是否正是您正在寻找的内容,但我也不想省略任何可能有帮助的内容:
最佳答案
只是一个想法:您的 context.getAssets
调用会抛出 NPE(可能是因为 context 为 null)。
我认为这是因为您实际上没有将 Dictionary Dictionary = new Dictionary(this);
放入 onCreate
方法中。
如果您将该代码放在 super.onCreate(bundle)
之后的 onCreate
上,我希望它能够工作(前提是该文件在那里)。
如果您担心应用程序初始化加载时间,我建议您使用AsyncTask在启动 Activity 中加载您的字典,以便您可以提供用户反馈。
关于java - 如何在 Android 应用程序的外部类中使用 Java 加载此文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17794391/