我目前正在android studio中设置dungeons&Dragons移动应用程序,并且希望能够查看当前保存到数据库“ CharacterDB”中的角色的值。如何以一种可以让我找到值以将其拉出以供以后使用的方式实现呢? 任何帮助或建议都将走很长一段路,谢谢。
我已经尝试过使用查询方法来遍历当前行中的项目选择,但无济于事。每当我尝试使用游标设置正确的查询时,它都会说,当我尝试遍历游标时,游标将为NULL。
////////////////////// 我目前有什么 ////////////////////
CharacterBaseHelper helper = new CharacterBaseHelper(getContext());
SQLiteDatabase Character = helper.getReadableDatabase();
ContentValues values = new ContentValues();
//Inserting test values into the Database
values.put(CharacterDB.CharacterTable.CharactersColumns.NAME,
"Character");
values.put(CharacterDB.CharacterTable.CharactersColumns.CLASS_NAME,
"Fighter" );
values.put(CharacterDB.CharacterTable.CharactersColumns.RACE, "Human" );
//saving the row ID for late use
Long newCharacterRowId =
Character.insert(CharacterDB.CharacterTable.TABLE_NAME, null , values);
/////////////////////////////////////////////////
然后这就是我要为值和帮助程序类创建的表
////////////////////////////////////////////// < / p>
public final class CharacterTable
{
public static final String TABLE_NAME = "character";
public final class CharactersColumns implements BaseColumns
{
public static final String NAME = "name";
public static final String CLASS_NAME = "className";
public static final String RACE = "race";
}
//////////////////
助手类
//////////////////
public class CharacterBaseHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;
private static final String DATABASE_NAME = "characterDB.db";
public CharacterBaseHelper(Context context){
super(context, DATABASE_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(
"create table " + CharacterTable.TABLE_NAME + "(" + " _id integer primary
key autoincrement, "
+ CharacterTable.CharactersColumns.NAME
+ "," + CharacterTable.CharactersColumns.CLASS_NAME
+ "," + CharacterTable.CharactersColumns.RACE + ")");
////////////////////
最后,我之前尝试过的
///////////////////
String[] projection = {
BaseColumns._ID,
CharacterDB.CharacterTable.CharactersColumns.NAME,
CharacterDB.CharacterTable.CharactersColumns.HIT_DICE,
};
String selection = CharacterDB.CharacterTable.CharactersColumns.NAME + " = ?";
String[] selectionArgs = { "Character" };
String sortOrder =
CharacterDB.CharacterTable.CharactersColumns.HIT_DICE + " DESC";
Cursor cursor = Character.query(
CharacterDB.CharacterTable.TABLE_NAME, // The table to query
projection, // The array of columns to return (pass null to get all)
selection, // The columns for the WHERE clause
selectionArgs, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
sortOrder // The sort order
);
List item = new ArrayList<>();
while(cursor.moveToNext()) {
long itemId = cursor.getLong(
cursor.getColumnIndexOrThrow(CharacterDB.CharacterTable.CharactersColumns._ID));
item.add(itemId);
}
cursor.close();
我一直试图获得的成功方法是从数据库读取并显示新数据,以便用户可以看到其角色的最终结果。
答案 0 :(得分:3)
这显示了一种获取值的方法,因此您可以查看它们:-
// all rows are gotten
Cursor AllCharacter = Character.query(CharacterTable.TABLE_NAME,null,null,null,null,null,null);
while (AllCharacter.moveToNext()) {
Log.v("ALLCHARACTER", BaseColumns._ID + " is " + AllCharacter.getLong(AllCharacter.getColumnIndex(BaseColumns._ID))
+ " " + CharacterTable.CharactersColumns.NAME + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.NAME))
+ " " + CharacterTable.CharactersColumns.CLASS_NAME + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.CLASS_NAME))
+ " " + CharacterTable.CharactersColumns.RACE + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.RACE))
);
}
日志将有一行
ALLCHARACTER:_id是1名称是Character className是Fighter race是Human
想要查找您可以使用的特定示例:-
// getting a specific row examle using the _id column
Cursor OneCharacter = Character.query(CharacterTable.TABLE_NAME,
// Pramater 2 columns specific null all columns
new String[]{
CharacterTable.CharactersColumns.NAME,
CharacterTable.CharactersColumns.CLASS_NAME,
CharacterTable.CharactersColumns.RACE,
BaseColumns._ID
},
BaseColumns._ID + "=?", // WHERE bit no WHERE writting use ? for no SQL injectioning with 4th paramter
new String[]{"1"}, // 1th ? changes 1st ? 3rd parameter and soing on
null,null,null
);
您可以使用ListView通过SimpleCursorAdapter查看很多行。例如
//Add another row the ListView
values.clear();
values.put(CharacterTable.CharactersColumns.NAME,"CharacaterMore");
values.put(CharacterTable.CharactersColumns.CLASS_NAME,"Defencer");
values.put(CharacterTable.CharactersColumns.RACE,"Maceman");
Character.insert(CharacterTable.TABLE_NAME,null,values);
// all rows
// Using final is not good but for ease has been used
final Cursor AllCharacter = Character.query(CharacterTable.TABLE_NAME,null,null,null,null,null,null);
while (AllCharacter.moveToNext()) {
Log.v("ALLCHARACTER", BaseColumns._ID + " is " + AllCharacter.getLong(AllCharacter.getColumnIndex(BaseColumns._ID))
+ " " + CharacterTable.CharactersColumns.NAME + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.NAME))
+ " " + CharacterTable.CharactersColumns.CLASS_NAME + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.CLASS_NAME))
+ " " + CharacterTable.CharactersColumns.RACE + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.RACE))
);
}
// ListView example
ListView AllCharacterListView = (ListView) findViewById(R.id.allcharacter);
SimpleCursorAdapter AllCharacterListAdapter = new SimpleCursorAdapter(this, // getContext if fragment
android.R.layout.simple_list_item_2,
AllCharacter,
new String[]{CharacterTable.CharactersColumns.NAME, CharacterTable.CharactersColumns.RACE},
new int[]{android.R.id.text1,android.R.id.text2},
0
);
AllCharacterListView.setAdapter(AllCharacterListAdapter);
// Adding onItemClick listener to show a Toast for the clicked item
AllCharacterListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(view.getContext(),
"Item clicking sees " + String.valueOf(id)
+ AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.NAME)) ,
Toast.LENGTH_LONG).show();
}
});
}
此示例导致:-