【问题标题】:Getting integer value instead of string out of database in android在android中从数据库中获取整数值而不是字符串
【发布时间】:2017-10-29 15:57:21
【问题描述】:

概念:我正在尝试在我的应用中实现“添加到收藏夹”功能。因此,在一项活动中,我有许多带有心脏图像的页面(ViewPager 的子项)。通过单击该图像,将数组列表中的字符串插入到数据库表中。在第二个活动中,我试图从该表的列中检索该值并将其设置为 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);
}

}

在第二个活动中,尝试检索 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());
      }

提前谢谢大家。

【问题讨论】:

    标签: java android database android-cursor


    【解决方案1】:

    在您的创建表语句中,第二列是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 表和queryingFavourites 中的数据使用同一列Favourite

    更新您的代码如下:

    .......
    ...............
    
    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)");
    }
    
    ........
    ..................
    

    最后,UninstallRe-Install 你的应用程序。

    【讨论】:

    • 非常感谢 FAT!现在想起来了,放值后改了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2018-05-15
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    相关资源
    最近更新 更多