在 android 中从数据库中获取整数值而不是字符串
Getting integer value instead of string out of database in android
概念:我正在尝试在我的应用程序中实现 'add to favourites' 功能。所以在一个 activity 中,我有很多页面(ViewPager 的子页面)带有心脏图像。通过单击该图像,数组列表中的一个字符串被插入到数据库的 table 中。在第二个 activity 中,我尝试从 table 的列中检索该值并将其设置为 TextView。
问题:我得到一些长数字作为文本而不是字符串。
2131165458
一个字符串数组列表:
final ArrayList<String> array= new ArrayList<>();
array.add(getString(R.string.one_1));
array.add(getString(R.string.one_2));
array.add(getString(R.string.one_3));
带有 onClickListener 的心形图像:
final ImageView favourite = (ImageView) root.findViewById(R.id.favourite);
favourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean hasInserted = myDB.hasInserted(array.get(position));
if (hasInserted) {
Toast.makeText(getActivity(), "DATA INSERTED SUCCESSFULLY", Toast.LENGTH_SHORT).show();
}
}
});
这是 SqliteOpenHelper:
class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "Favourites_Database";
private static final String TABLE_NAME = "Favourites";
//private static final String COL_1 = "ID";
private static final String COL_2 = "Favourites";
DBHelper(Context context) {
super(context, DATABASE_NAME, null, 3);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, Favourite TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
boolean hasInserted(String favourites) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, favourites);
long result = db.insert(TABLE_NAME, null, contentValues);
return (result != -1);
}
Cursor showData() {
SQLiteDatabase db = this.getWritableDatabase();
return db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
}
}
在第二个 activity 中,尝试检索 col_2 值:
myDb = new DBHelper(this);
Cursor data = myDb.showData();
if(data.moveToFirst()) {
do {
String res = data.getString(1);
textView.setText(res);
textView.setTextColor(Color.BLUE);
}while (data.moveToNext());
}
提前谢谢大家。
在您的 create table 语句中,第二列是 Favourite
db.execSQL("create table " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, Favourite TEXT)");
但在您的 hasInserted()
方法中,您使用了 contentValues.put(COL_2, favourites)
,其中 COL_2
值是 Favourites
,这是不同的。
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, favourites);
#. 对 creating
table 和来自 table 的 querying
数据使用相同的列 Favourite
Favourites
.
更新您的代码如下:
.......
...............
private static final String COL_2 = "Favourite";
DBHelper(Context context) {
super(context, DATABASE_NAME, null, 3);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + " ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Favourite TEXT)");
}
........
..................
最后,Uninstall
和Re-Install
你的申请。
概念:我正在尝试在我的应用程序中实现 'add to favourites' 功能。所以在一个 activity 中,我有很多页面(ViewPager 的子页面)带有心脏图像。通过单击该图像,数组列表中的一个字符串被插入到数据库的 table 中。在第二个 activity 中,我尝试从 table 的列中检索该值并将其设置为 TextView。
问题:我得到一些长数字作为文本而不是字符串。
2131165458
一个字符串数组列表:
final ArrayList<String> array= new ArrayList<>();
array.add(getString(R.string.one_1));
array.add(getString(R.string.one_2));
array.add(getString(R.string.one_3));
带有 onClickListener 的心形图像:
final ImageView favourite = (ImageView) root.findViewById(R.id.favourite);
favourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean hasInserted = myDB.hasInserted(array.get(position));
if (hasInserted) {
Toast.makeText(getActivity(), "DATA INSERTED SUCCESSFULLY", Toast.LENGTH_SHORT).show();
}
}
});
这是 SqliteOpenHelper:
class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "Favourites_Database";
private static final String TABLE_NAME = "Favourites";
//private static final String COL_1 = "ID";
private static final String COL_2 = "Favourites";
DBHelper(Context context) {
super(context, DATABASE_NAME, null, 3);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, Favourite TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
boolean hasInserted(String favourites) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, favourites);
long result = db.insert(TABLE_NAME, null, contentValues);
return (result != -1);
}
Cursor showData() {
SQLiteDatabase db = this.getWritableDatabase();
return db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
}
}
在第二个 activity 中,尝试检索 col_2 值:
myDb = new DBHelper(this);
Cursor data = myDb.showData();
if(data.moveToFirst()) {
do {
String res = data.getString(1);
textView.setText(res);
textView.setTextColor(Color.BLUE);
}while (data.moveToNext());
}
提前谢谢大家。
在您的 create table 语句中,第二列是 Favourite
db.execSQL("create table " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, Favourite TEXT)");
但在您的 hasInserted()
方法中,您使用了 contentValues.put(COL_2, favourites)
,其中 COL_2
值是 Favourites
,这是不同的。
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, favourites);
#. 对 creating
table 和来自 table 的 querying
数据使用相同的列 Favourite
Favourites
.
更新您的代码如下:
.......
...............
private static final String COL_2 = "Favourite";
DBHelper(Context context) {
super(context, DATABASE_NAME, null, 3);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + " ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Favourite TEXT)");
}
........
..................
最后,Uninstall
和Re-Install
你的申请。