Я хотел бы сохранить заголовок, целое число и URL-адрес в базе данных SQLite из веб-службы JSON. Я использую код, чтобы сделать это, и это прекрасно работает, когда я использую другой URL, но теперь я всегда получал эти исключения для каждого объекта JSON Я хотел бы сохранить:Сохранение данных в SQLite от JSON Android
E/SQLiteLog: (20) оператор прерывает в 6: [INSERT INTO categories_table (title, imageurl, azon) VALUES (?,?,?)] datatype mismatchE/SQLiteDatabase: Ошибка ввода title = Tánctanár imageurl = http://80.99.190.2:8080/mobil/download?id=360 azon = 71 android.database .sqlite.SQLiteDatatypeMismatchException: несоответствие типов данных (код 20)
CTHandler.java:
public class CTHandler extends SQLiteOpenHelper implements CategoriesListener {
private static final int CT_VERSION = 1;
private static final String CT_NAME = "CategoriesDatabase.db";
private static final String TABLE_NAME = "categories_table";
private static final String KEY_TITLE = "title";
private static final String KEY_IMAGEURL = "imageurl";
private static final String KEY_AZON = "azon";
String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+KEY_TITLE+" TEXT,"+KEY_IMAGEURL+" TEXT,"+KEY_AZON+" TEXT)";
String DROP_TABLE = "DROP TABLE IF EXISTS "+TABLE_NAME;
public CTHandler(Context context) {
super(context, CT_NAME, null, CT_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_TABLE);
onCreate(db);
}
@Override
public void addCategories(CategoriesItem citem) {
SQLiteDatabase db = this.getWritableDatabase();
try{
ContentValues values = new ContentValues();
values.put(KEY_TITLE, citem.getTitle());
values.put(KEY_IMAGEURL,citem.getImageurl());
values.put(KEY_AZON,citem.getAzon());
db.insert(TABLE_NAME, null, values);
db.close();
}catch (Exception e){
Log.e("problem",e+"");
}
}
@Override
public ArrayList<CategoriesItem> getAllCategories() {
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<CategoriesItem> categoriesList = null;
try{
categoriesList = new ArrayList<CategoriesItem>();
String QUERY = "SELECT * FROM "+TABLE_NAME;
Cursor cursor = db.rawQuery(QUERY, null);
if(!cursor.isLast())
{
while (cursor.moveToNext())
{
CategoriesItem ci = new CategoriesItem();
ci.setTitle(cursor.getString(0));
ci.setImageurl(cursor.getString(1));
ci.setAzon(cursor.getString(2));
categoriesList.add(ci);
}
}
db.close();
}catch (Exception e){
Log.e("error",e+"");
}
return categoriesList;
}
@Override
public int getCategoriresCount() {
int num = 0;
SQLiteDatabase db = this.getReadableDatabase();
try{
String QUERY = "SELECT * FROM "+TABLE_NAME;
Cursor cursor = db.rawQuery(QUERY, null);
num = cursor.getCount();
db.close();
return num;
}catch (Exception e){
Log.e("error",e+"");
}
return 0;
}
}
Я пытался использовать BOLB
и INTEGER PRIMARY KEY
для ImageUrl без успеха.
Это один объект JSON из массива:
"channel":[{"title":"MENYASSZONYI RUHA","imageurl":"http://80.99.190.2:8080/mobil/download?id=350","azon":53},
Это то, что я хотел бы сохранить, и я хотел бы также, что URL изображения будет сохранить как String
. Я не люблю использовать Bitmaps и byte [] Я бы просто хотел сохранить, как это имя изображения. Если у кого-нибудь есть идея, как это сделать, ответьте.
В класс 'CTHandler', вы делаете азон« типом », но передаете целое число при вставке. Убедитесь, что вы передаете 'String' в это поле. –
Должен ли я использовать «INTEGER PRIMARY KEY» для azon? Я сохранил azon как String, и когда я использую 'citem.getAzon()', он возвращается с помощью String. –
Добавляя, что вы используете для Azon в базе данных. –