如何在Android应用程序中使用Java在外部类中加载此文本文件?

时间:2013-07-22 18:06:41

标签: java android class adt

我有一个文本文件,其中有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程序。我不知道这是否正是您正在寻找的,但我不想省略任何可能有用的内容:

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

1 个答案:

答案 0 :(得分:1)

只是一个想法:你的context.getAssets调用抛出NPE(可能是因为context是null)。

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

如果您将代码放在onCreate super.onCreate(bundle)之后,我希望它可以正常工作(假设文件在那里)。

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