背景:我正在制作一款基于回合制的多人游戏。用户随机与另一个用户匹配。在匹配时,给用户一个单词列表,他将需要用于提醒游戏。这个单词列表是从一个更大的列表中随机选择的。
相关课程是:
WordsListDatabaseHelper
- 包含保存对手名称的表格和随机的单词列表。
FindingOpponentActivity
- 找到对手并随机与用户匹配。
PlayGameActivity
- 从数据库中检索wordList并放在这里。
WordList
- 包含很长单词列表的类,有一个返回子列表的静态getRandomWords
方法。
问题:一旦用户与FindOpponentActivity中的另一个匹配,就会启动一个intent并启动一个新的活动PlayGameActivity。这是假设出现随机单词列表的活动,但它们所假设的区域是空的。抛出没有异常,logcat没有奇怪的输出据我所知。
我在这行代码上设置了断点:
WordsListDatabaseHelper.insertWordList (db, wordsContainer, mOpponent.getUsername());
在调试时,我收到以下消息:警告:没有找到行中的可执行代码(此行号)
我还在PlayGameActivity
:
if (cursor.moveToFirst()) {
//get wordList
String savedWordList = cursor.getString(0);
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<String>>() {}.getType();
ArrayList<String> finalWordList = gson.fromJson(savedWordList, type);
mCopy = new LinkedList<String>();
mCopy.addAll(finalWordList);
此处没有消息,但是当我双击finalWordList
或savedWordList
时,我收到以下消息:找不到本地变量savedWordList/finalWordList
。
此外,当我双击mCopy时,它显示:mCopy = null;
以下是相关代码:
public class WordsListDatabaseHelper extends SQLiteOpenHelper {
protected static Set<String> mSelectedWords;
private static final String DB_NAME = "GAME_TABLE";
private static final int DB_VERSION = 1;
protected static LinkedList<String> mCopy;
public static String oppName = "";
protected static String EXTRA_OPPONENT_NAME = "OPPONENT_NAME";
WordsListDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE GAME ("
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "SELECTED_WORDS TEXT, "
+ "OPPONENT_NAME TEXT);"
WordsListDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE GAME ("
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "SELECTED_WORDS TEXT, "
+ "OPPONENT_NAME TEXT);"
);
public static void insertWordList(SQLiteDatabase db, String wordsContainer, String oppName) {
ContentValues wordValues = new ContentValues();
wordValues.put("SELECTED_WORDS", wordsContainer);
wordValues.put("OPPONENT_NAME", oppName);
db.insert("GAME", null, wordValues);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
这是FindingOpponentActivity
方法中的onResume
:
//add the game values in the SQLite database
String wordsContainer = new String();
Gson gson = new Gson();
wordsContainer = gson.toJson(WordsList.getRandomWords());
SQLiteOpenHelper wordsListDatabaseHelper =
new WordsListDatabaseHelper(FindingOpponentActivity.this);
SQLiteDatabase db = wordsListDatabaseHelper.getWritableDatabase();
WordsListDatabaseHelper.insertWordList
(db, wordsContainer, mOpponent.getUsername());
最后,以下是onCreate
的{{1}}方法代码:
PlayGameActivity
我知道这是一个非常冗长的帖子,但我将永远感激任何形式的帮助。我被困在这个问题上一段令人尴尬的长时间。
更新No.1:根据__建议,我尝试了以下方法: - 删除并重新安装应用程序apk - 清理和重建整个项目
我还在这里输入了日志消息:
Intent randIntent = getIntent();
mOpponentName = randIntent.getStringExtra(EXTRA_RAND_OPPONENT);
try {
SQLiteOpenHelper wordsListDatabaseHelper = new WordsListDatabaseHelper(this);
SQLiteDatabase db = wordsListDatabaseHelper.getReadableDatabase();
Cursor cursor = db.query("GAME",
new String[] {"SELECTED_WORDS"},
"OPPONENT_NAME =? ",
new String[]{mOpponentName},
null, null, null);
//move to the first record in the Cursor
if (cursor.moveToFirst()) {
//get wordList
String savedWordList = cursor.getString(0);
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<String>>() {}.getType();
ArrayList<String> finalWordList = gson.fromJson(savedWordList, type);
protected LinkedList<String> mCopy;
mCopy = new LinkedList<String>();
mCopy.addAll(finalWordList);
未记录任何消息。