我有一个文本文件,其中有173,139个单词由换行符分隔。基本上,我需要将这个1.7mb文件加载到一个字符串数组中,以便于访问。我试图在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());
但所有这些似乎都会导致我的应用程序出现致命错误。
所以最后两个问题:是否可以在应用程序代码的开头实例化?如果是这样,为什么在我尝试这样做时代码不起作用?
编辑:我被要求输出logcat。道歉,这是我的第一个“真正的”android程序。我不知道这是否正是您正在寻找的,但我不想省略任何可能有用的内容:
答案 0 :(得分:1)
只是一个想法:你的context.getAssets
调用抛出NPE(可能是因为context是null)。
我认为那是因为您实际上没有将Dictionary dictionary = new Dictionary(this);
放入onCreate
方法中。
如果您将代码放在onCreate
super.onCreate(bundle)
之后,我希望它可以正常工作(假设文件在那里)。
如果您担心应用初始化加载时间,我建议您使用AsyncTask在启动活动中加载字典,以便提供用户反馈。