从JSON将数据保存到SQLite Android
我想从JSON webservice中将标题,整数和url保存到SQLite数据库中。我使用的代码来做到这一点,当我使用另一个url时,它是完美的工作,但现在我总是得到这个例外,我想保存每个JSON对象:从JSON将数据保存到SQLite Android
E/SQLiteLog:(20 )语句中止在6:[INSERT INTO categories_table(title,imageurl,azon)VALUES(?,?,?)]数据类型mismatchE/SQLiteDatabase: 插入标题=Tânctanárimageurl = 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 []我只想保存它就像图像的名称。如果有人有想法如何做,请回复。
要保存图像,您需要使用BLOB数据类型。但我不知道保存网址。
请尝试这样,让我知道它的工作与否。
尝试将所有内容保存到您的数据库后做.toString();
如果它没有工作,你可以尝试下面的建议。
变化这在你的代码和
String DROP_TABLE = "DROP TABLE IF EXISTS "+TABLE_NAME;
与此
String DROP_TABLE = db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
如果没有作品试图一次更改数据库的名称,并给予尝试更换!
希望它会帮助。如果它没有工作让我知道。
谢谢你给我写信,但不幸的是他们不工作。你有其他想法吗? –
在'CTHandler'类,你正在使azon成为'Text'类型,但在插入时传递整数。请确保你传递字符串到该字段。 –
我应该使用'INTEGER PRIMARY KEY'作为azon吗?我将azon保存为一个String,当我使用'citem.getAzon()'时,它返回一个String。 –
在添加时,您在数据库中使用的是Azon。 –