我正在为android制作一个hangman应用程序我的问题是我需要将一个单词从我的数据库类传递到我的游戏类中,我知道游戏类就像我最初使用数组列表创建它一样工作,然后我做了一个我也知道的数据库类可以工作,因为我可以向其中添加单词并查看它们。
问题是我似乎无法将一个单词从我的数据库类传递到我的游戏类,我现在已经花了 3 天时间并尝试了许多不同的东西,但没有运气,任何可以提供的帮助都会很棒因为我觉得我可能需要尽快把我的补偿扔出窗外。
这是我的数据库类
package com.example.hangpract;
import java.util.ArrayList;
import java.util.Random;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.ArrayAdapter;
public class mysteryWordDB {
public static final String KEY_WORD="mystery_word";
public static ArrayList<String> results = new ArrayList<String>();
private static final String DATABASE_NAME="HangManWords";
private static final String DATABASE_TABLE="wordsTable";
private static final int DATABASE_VERSION= 1;
private DbHelper ourHelper;
private final Context ourContext;
private static SQLiteDatabase ourDatabase;
private static class DbHelper extends SQLiteOpenHelper{
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_WORD + " TEXT NOT NULL);"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
public mysteryWordDB(Context c){
ourContext = c;
}
public mysteryWordDB open()throws SQLException{
ourHelper = new DbHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
public void close(){
ourHelper.close();
}
//method to add user words from the edit word class
public long createEntry(String word) {
// TODO Auto-generated method stub
ContentValues cv = new ContentValues();
cv.put(KEY_WORD, word);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}
//method to display all words in the view class
public String getData() {
// TODO Auto-generated method stub
String[] columns = new String[]{KEY_WORD};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
String result = "";
int iWord = c.getColumnIndex(KEY_WORD);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
result = result + c.getString(iWord) + "\n";
}
return result;
}
//method that should set up an array of the words in the data base, can't get this bit right
public void getMysteryWord() {
Cursor c = ourDatabase.rawQuery("SELECT KEY_WORD FROM " +
DATABASE_TABLE, null);
if (c != null ) {
if (c.moveToFirst()) {
do {
String mystWord = c.getString(c.getColumnIndex(KEY_WORD));
results.add(mystWord.toString());
}while (c.moveToNext());
}}
}
//method that is called from the game class to get a random string from the array to use in the game
public static String word(){
Random rand = new Random();
int i=rand.nextInt(results.size());
if(i >-1)return results.get(i);
return results.get(i);
}
}
我尝试过的最新方法的问题是:
//method that should set up an array of the words in the data base, can't get this bit right
public void getMysteryWord() {
Cursor c = ourDatabase.rawQuery("SELECT KEY_WORD FROM " +
DATABASE_TABLE, null);
if (c != null ) {
if (c.moveToFirst()) {
do {
String mystWord = c.getString(c.getColumnIndex(KEY_WORD));
results.add(mystWord.toString());
}while (c.moveToNext());
}}
}
//method that is called from the game class to get a random string from the array to use in the game
public static String word(){
Random rand = new Random();
int i=rand.nextInt(results.size());
if(i >-1)return results.get(i);
return results.get(i);
}
}
然后这是游戏类,它需要传入 KEY_WORD 的随机实例:
package com.example.hangpract;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class game extends Activity implements OnClickListener {
private ImageView hangimg;
private TextView word;
private String mysteryWord = mysteryWordDB.word();
private int numWrongGuesses;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
bindviews();
inistMystword();
initWrongGuesses();
//set button views for letters
Button aButton = (Button)
this.findViewById(R.id.buttonA);
aButton.setOnClickListener(this);
Button bButton = (Button)
this.findViewById(R.id.buttonB);
bButton.setOnClickListener(this);
Button cButton = (Button)
this.findViewById(R.id.buttonC);
cButton.setOnClickListener(this);
Button dButton = (Button)
this.findViewById(R.id.buttonD);
dButton.setOnClickListener(this);
Button eButton = (Button)
this.findViewById(R.id.buttonE);
eButton.setOnClickListener(this);
Button fButton = (Button)
this.findViewById(R.id.buttonF);
fButton.setOnClickListener(this);
Button gButton = (Button)
this.findViewById(R.id.buttonG);
gButton.setOnClickListener(this);
Button hButton = (Button)
this.findViewById(R.id.buttonH);
hButton.setOnClickListener(this);
Button iButton = (Button)
this.findViewById(R.id.buttonI);
iButton.setOnClickListener(this);
Button jButton = (Button)
this.findViewById(R.id.buttonJ);
jButton.setOnClickListener(this);
Button kButton = (Button)
this.findViewById(R.id.buttonK);
kButton.setOnClickListener(this);
Button lButton = (Button)
this.findViewById(R.id.buttonL);
lButton.setOnClickListener(this);
Button mButton = (Button)
this.findViewById(R.id.buttonM);
mButton.setOnClickListener(this);
Button nButton = (Button)
this.findViewById(R.id.buttonN);
nButton.setOnClickListener(this);
Button oButton = (Button)
this.findViewById(R.id.buttonO);
oButton.setOnClickListener(this);
Button pButton = (Button)
this.findViewById(R.id.buttonP);
pButton.setOnClickListener(this);
Button qButton = (Button)
this.findViewById(R.id.buttonQ);
qButton.setOnClickListener(this);
Button rButton = (Button)
this.findViewById(R.id.buttonR);
rButton.setOnClickListener(this);
Button sButton = (Button)
this.findViewById(R.id.buttonS);
sButton.setOnClickListener(this);
Button tButton = (Button)
this.findViewById(R.id.buttonT);
tButton.setOnClickListener(this);
Button uButton = (Button)
this.findViewById(R.id.buttonU);
uButton.setOnClickListener(this);
Button vButton = (Button)
this.findViewById(R.id.buttonV);
vButton.setOnClickListener(this);
Button wButton = (Button)
this.findViewById(R.id.buttonW);
wButton.setOnClickListener(this);
Button xButton = (Button)
this.findViewById(R.id.buttonX);
xButton.setOnClickListener(this);
Button yButton = (Button)
this.findViewById(R.id.buttonY);
yButton.setOnClickListener(this);
Button zButton = (Button)
this.findViewById(R.id.buttonZ);
zButton.setOnClickListener(this);
//sets button view for new game
Button newbutton = (Button)
this.findViewById(R.id.buttNew);
newbutton.setOnClickListener(this);
//sets button view for menu
Button menuButton = (Button)
this.findViewById(R.id.buttMenu);
menuButton.setOnClickListener(this);
}
//set actions on buttons
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonA:
validate('a');
break;
case R.id.buttonB:
validate('b');
break;
case R.id.buttonC:
validate('c');
break;
case R.id.buttonD:
validate('d');
break;
case R.id.buttonE:
validate('e');
break;
case R.id.buttonF:
validate('f');
break;
case R.id.buttonG:
validate('g');
break;
case R.id.buttonH:
validate('h');
break;
case R.id.buttonI:
validate('i');
break;
case R.id.buttonJ:
validate('j');
break;
case R.id.buttonK:
validate('k');
break;
case R.id.buttonL:
validate('l');
break;
case R.id.buttonM:
validate('m');
break;
case R.id.buttonN:
validate('n');
break;
case R.id.buttonO:
validate('o');
break;
case R.id.buttonP:
validate('p');
break;
case R.id.buttonQ:
validate('q');
break;
case R.id.buttonR:
validate('r');
break;
case R.id.buttonS:
validate('s');
break;
case R.id.buttonT:
validate('t');
break;
case R.id.buttonU:
validate('u');
break;
case R.id.buttonV:
validate('v');
break;
case R.id.buttonW:
validate('w');
break;
case R.id.buttonX:
validate('x');
break;
case R.id.buttonY:
validate('y');
break;
case R.id.buttonZ:
validate('z');
break;
case R.id.buttNew:
Intent newGame = new Intent(v.getContext(), game.class);
startActivityForResult(newGame,0);
break;
case R.id.buttMenu:
Intent menu = new Intent(v.getContext(), MainActivity.class);
startActivityForResult(menu,0);
}
}
//get mystery word
public void inistMystword(){
word = (TextView) findViewById(R.id.mysteryword);
word.setText(mysteryWord);
word.setText(underscore());
}
//method to display the mystery word as underscores
public String underscore() {
StringBuffer result = new StringBuffer();
for (int i = 0; i < mysteryWord.length(); i++) {
result.append("_ ");
}
return result.toString();
}
//method to validate guess
private void validate(char ch) {
if (mysteryWord.indexOf(ch)== -1){
if (numWrongGuesses < 6){
numWrongGuesses++;
}
checkLose();
}
else {
if (numWrongGuesses <6){
updateMystWord(ch);
checkWin();
} else {
checkLose();
}
}}
//method to reveal letter
private void updateMystWord(char ch) {
char[] updatedWord =
word.getText().toString().toCharArray();
for (int i = 0; i < mysteryWord.length(); i++) {
if (ch == mysteryWord.charAt(i))
updatedWord[i * 2] = mysteryWord.charAt(i);
word.setText(new String(updatedWord));
}
}
//sets number of wrong guesses to zero at game start
private void initWrongGuesses() {
numWrongGuesses = 0;
}
//checks when game is lost and displays lose screen
private void checkLose() {
if (numWrongGuesses == 6)
hangimg.setImageResource(R.drawable.lose);
}
//checks when game is won and displays win screen
private void checkWin() {
if (word.getText().toString().indexOf("_") == -1) {
hangimg.setImageResource(R.drawable.win);
}
}
//binds the views
private void bindviews(){
hangimg = (ImageView)
this.findViewById(R.id.imageView1);
}
}
游戏类肯定可以工作,数据库也可以工作,我只是不知道在尝试将单个值传递给游戏类时我哪里出错了,任何帮助都将不胜感激。