我正在尝试为Android构建一个简单的应用程序无法弄清楚为什么我的应用程序不断崩溃我已将其追溯到这行代码
<code>WG.setRandomWord(words.get(rand.nextInt(words.size())));</code>
我检查了我的logcat,它显示我的word文件甚至没有被检测到com.sagproductions.gamertaggenerator W/System.err: java.io.FileNotFoundException: words.txt: open failed: ENOENT (No such file or directory)
但我在文档结构中有我的文件word文件。
更多上下文是我的代码:
JAVA wordGenerator
package com.sagproductions.gamertaggenerator;
public class WordGenerator {
private String mRandomWord;
private int mRandomNum;
public WordGenerator(String randomWord, int randomNum){
mRandomNum=randomNum;
mRandomWord=randomWord;
}
public int getRandomNum(){
return mRandomNum;
}
public void setRandomNum(int randomNum){
mRandomNum=randomNum;
}
public String getRandomWord(){
return mRandomWord;
}
public void setRandomWord(String randomWord){
mRandomWord=randomWord;
}
}
package com.sagproductions.gamertaggenerator;
public class WordGenerator {
private String mRandomWord;
private int mRandomNum;
public WordGenerator(String randomWord, int randomNum){
mRandomNum=randomNum;
mRandomWord=randomWord;
}
public int getRandomNum(){
return mRandomNum;
}
public void setRandomNum(int randomNum){
mRandomNum=randomNum;
}
public String getRandomWord(){
return mRandomWord;
}
public void setRandomWord(String randomWord){
mRandomWord=randomWord;
}
}
Java MainActivity
package com.sagproductions.gamertaggenerator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.lang.String;
import java.util.ArrayList;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
WordGenerator WG;
private Button mSingleWordGenerator;
private Button mTwoWordGenerator;
private Button mThreeWordGenerator;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSingleWordGenerator = (Button)findViewById(R.id.button);
mSingleWordGenerator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
generateWord();
editText=(EditText)findViewById(R.id.editText);
editText.setText(WG.getRandomWord(),TextView.BufferType.EDITABLE);
}
});
mTwoWordGenerator = (Button)findViewById(R.id.button2);
mTwoWordGenerator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
mThreeWordGenerator = (Button)findViewById(R.id.button3);
mThreeWordGenerator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
public void generateWord(){
final File file = new File("words.txt");
ArrayList<String> words= new ArrayList<String>();
Random rand=new Random();
try(final Scanner scanner=new Scanner(file)){
while(scanner.hasNextLine()){
String line = scanner.nextLine();
words.add(line);
}
}catch(FileNotFoundException e) {
e.printStackTrace();
}
WG.setRandomWord(words.get(rand.nextInt(words.size())));
}
}
答案 0 :(得分:0)
WG
字段永远不会被初始化,因此它是null
。所以当你调用那个方法时,你可能会得到一个NullPointerException。你应该在某个地方初始化它,也许当你声明它时(所以WordGenerator WG;
会被WordGenerator WG = new WordGenerator(INITIAL_RANDOM_WORD, INITIAL_RANDOM_VALUE);
替换,其中INITIAL_RANDOM_WORD和INITIAL_RANDOM_VALUE是你在其他地方定义的某些值。)
编辑:由于words.size()
是0
,因为FileNotFoundException,因此该行似乎导致了问题。读取该文件的正确方法取决于您放置它的位置。查看this question的答案(及其链接到的页面),了解在Android中正确阅读文本文件的不同方法。