尝试逐行将文本文件加载到数组中,但数组保持为null,我做错了什么? (Java,android studio)

时间:2015-09-03 12:40:15

标签: java android android-studio inputstream readline

private String[] words;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mDecorView = getWindow().getDecorView();

    loadWords();

    TextView tv = (TextView) findViewById(R.id.word);
    tv.setText(words[0]);
}

 public void loadWords()
{

    try {
        InputStream file = new FileInputStream("words.txt");
        InputStreamReader sr = new InputStreamReader(file);
        BufferedReader br = new BufferedReader(sr);

        int n = 0;
        while(br.readLine() != null)
        {
            words[n] = br.readLine();
            n++;
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

好的,所以我只是尝试打印出数组中的第一个元素,但应用程序在启动过程中崩溃并给出错误“尝试从空数组中读取”

编辑 - 解决方案
- 我没有初始化阵列。(我知道我有100行) - 我的输入流不正确(无法找到我的文件)
- 我试图从一个特殊的布局(当时没有选择)更新TextView(

String[] words = new String[100];

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mDecorView = getWindow().getDecorView();
    loadWords();
}

public void changeView(View view) {

    setContentView(R.layout.game_view);
    TextView tv = (TextView) findViewById(R.id.word);
    tv.setText(words[0]);
}

public void loadWords()
{
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(getAssets().open("words.txt")));
        for(int i = 0;i<words.length;i++)
        {
            words[i] = br.readLine();
        }
        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:2)

您需要对您的阵列进行初始化,而您并没有这样做。阵列声明和初始化是不同的事情不是吗?

数组的初始化将按如下方式进行:

private String[] words = new String[2000];

请尝试。不过,请尝试使用ArrayList代替array

答案 1 :(得分:1)

很可能你从未初始化你的阵列。你刚宣布它。

关键是:你的代码只是说:我想使用一个字符串数组(ArrayList<String>)。

但是为了实际这样做 - 你必须创建一个要填充的数组对象(参见here关于如何做到的各种方法)

另一方面:&#34;只是创建一个阵列&#34 ;;可能很难;鉴于您可能不知道数组中需要多少行(但是在初始化数组对象时需要知道)。

所以,我建议使用像{{1}}这样的动态集合类而不是固定大小的数组。只是谷歌吧;在发布这个问题之前你应该做的研究......好吧,之后。