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

标签 java android class adt

我有一个文本文件,其中包含由换行符分隔的 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 程序。我不知道这是否正是您正在寻找的内容,但我也不想省略任何可能有帮助的内容:

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

最佳答案

只是一个想法:您的 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/

相关文章:

android - 键盘在 flutter 中打开时 Ui 溢出

javascript - 如何添加第二个按钮而不导致堆栈崩溃?

class - 在 Groovy 脚本中包含类

java - FFmpeg 不适用于 android 10,直接进入 onFailure(String message) 并显示空消息

java - 从堆栈跟踪中按名称获取类

java - 从第一个 JFrame 调用的方法在第二个 JFrame 中不执行任何操作

android - 协程中的 HandlerThread 替换

java - 如何在每次启动应用程序时进行OTP验证?

python - 有什么理由给 self 一个默认值吗?

java - 我们可以使用 html 和 javascript 为独立应用程序创建 GUI 吗?