【发布时间】:2021-10-10 06:08:21
【问题描述】:
我正在使用 Java 在 Android Studio 中制作一个刽子手游戏。我有一个“猜测”按钮,它会打开一个对话框,其中包含一个编辑文本和两个按钮。其中一个按钮是确认猜测,以便获取输入的文本 (guessedWord) 并将其与刽子手词 (wordToGuess) 进行比较。如果它是错误的,它会添加一个图像,如果它是正确的,用户将赢得游戏。比较单词的方法在我的活动中(GameActivity.java),但按下按钮在我的对话框片段中(GuessWord.java)。我正在尝试在对话框片段中调用方法runGuessWord(),但是当我单击确认按钮时出现错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void com.example.hangman.GameActivity.guessWord()”
我尝试使用 getter 和 setter 来发送输入的文本。代码如下:
GameActivity.java
public class GameActivity extends AppCompatActivity {
private GuessWord guessWord;
public int wrongGuesses = 0;
public String wordToGuess;
private void openGuessDialog() {
guessWord = GuessWord.newInstance();
guessWord.show(getSupportFragmentManager(), GuessWord.TAG);
}
public void runGuessWord() {
GuessWord guessedWordInput = new GuessWord();
guessedWordInput.setGuessedWord("");
guessedWord = guessedWordInput.getGuessedWord();
if (!guessedWord.equals("")) {
if (guessedWord.equals(wordToGuess)) {
gameWin();
} else {
wrongGuesses += 1;
setImage();
if (wrongGuesses == 7) {
gameOver();
}
}
}
}
}
GuessWord.java:
public class GuessWord extends DialogFragment {
private GameActivity gameActivity;
public String guessedWord;
public EditText guessEntered;
public static final String TAG = "guess";
public static GuessWord newInstance() {
Bundle args = new Bundle();
GuessWord fragment = new GuessWord();
fragment.setArguments(args);
return fragment;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.dialog_guess, container);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setCancelable(false);
closeGuess();
confirmGuess();
}
private void closeGuess() {
Button closeGuess = getView().findViewById(R.id.btnCloseGuess);
closeGuess.setOnClickListener(v -> {
dismiss();
});
}
private void confirmGuess() {
Button confirmGuess = getView().findViewById(R.id.btnConfirmGuess);
EditText guessEntered = getView().findViewById(R.id.etGuess);
confirmGuess.setOnClickListener(v -> {
guessedWord = guessEntered.getText().toString().toUpperCase();
if (guessedWord.equals("")) {
Toast.makeText(getActivity(), "Please enter a guess!", Toast.LENGTH_SHORT).show();
} else {
dismiss();
System.out.println("Text Input = " + guessedWord);
gameActivity.runGuessWord();
}
});
}
public String getGuessedWord() {
return guessedWord;
}
public void setGuessedWord(String guessedWord) {
this.guessedWord = guessedWord;
}
}
【问题讨论】:
标签: java android android-activity methods dialog