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();
}
}
答案 0 :(得分:2)
您需要对您的阵列进行初始化,而您并没有这样做。阵列声明和初始化是不同的事情不是吗?
数组的初始化将按如下方式进行:
private String[] words = new String[2000];
请尝试。不过,请尝试使用ArrayList
代替array
答案 1 :(得分:1)
很可能你从未初始化你的阵列。你刚宣布它。
关键是:你的代码只是说:我想使用一个字符串数组(ArrayList<String>
)。
但是为了实际这样做 - 你必须创建一个要填充的数组对象(参见here关于如何做到的各种方法)
另一方面:&#34;只是创建一个阵列&#34 ;;可能很难;鉴于您可能不知道数组中需要多少行(但是在初始化数组对象时需要知道)。
所以,我建议使用像{{1}}这样的动态集合类而不是固定大小的数组。只是谷歌吧;在发布这个问题之前你应该做的研究......好吧,之后。