0

我有一个由换行符分隔的 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 输出。抱歉,这是我的第一个“真正的”安卓程序。我不知道这是否正是您正在寻找的,但我也不想省略任何可能有帮助的内容:

http://pastebin.com/raw.php?i=c99LFZzx

4

1 回答 1

1

只是一个想法:您的context.getAssets调用引发了 NPE(可能是因为 context 为空)。

我认为那是因为您实际上没有Dictionary dictionary = new Dictionary(this);输入onCreate方法。

onCreate如果您将该代码放在, after上,我希望它能够工作(前提是文件在那里)super.onCreate(bundle)

如果您担心应用程序初始化加载时间,我建议您使用AsyncTask在启动活动中加载您的字典,以便提供用户反馈。

于 2013-07-22T18:24:16.087 回答