2017-05-29 1 views
0

erhalten Das Konzept: Ich versuche zu implementieren "zu Favoriten hinzufügen" -Funktion in meiner App. Also in einer Aktivität habe ich viele Seiten (Kinder von ViewPager) mit Herzbild. Durch Klicken auf dieses Bild wird eine Zeichenfolge aus einer Array-Liste in die Tabelle der Datenbank eingefügt. In der zweiten Aktivität versuche ich, diesen Wert aus der Spalte dieser Tabelle abzurufen und auf eine TextView zu setzen.Integer-Wert anstelle der Zeichenfolge aus der Datenbank in Android

Das Problem: Ich bekomme eine lange Zahl als Text anstelle der Zeichenfolge.

2131165458 

Ein Arraylist von String:

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)); 

Herz Bild mit 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(); 
       } 
    } 
    }); 

Hier ist der 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); 
} 

}

In der zweiten Aktivität, versuchen col_2 Werte abzurufen:

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()); 
     } 

Danke Jungs im Voraus.

Antwort

0

In Ihrer erstellen Anweisungstabelle die zweite Spalte Favourite

db.execSQL("create table " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, Favourite TEXT)"); 

aber in Ihrer hasInserted() Methode haben Sie contentValues.put(COL_2, favourites) wo COL_2 Wert Favourites verwendet, die anders ist.

ContentValues contentValues = new ContentValues(); 
contentValues.put(COL_2, favourites); 

#. Verwenden Sie dieselbe Spalte Favourite für creating Tabelle und querying Daten aus Tabelle Favourites.

Aktualisieren Sie Ihren Code wie folgt:

....... 
............... 

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

........ 
.................. 

Schließlich Uninstall und Re-Install Ihre Anwendung.

+0

Vielen Dank FAT! Ich erinnere mich jetzt, ich habe es geändert, nachdem ich den Wert eingegeben habe. –

+0

Herzlich willkommen :) – FAT

Verwandte Themen