从JSON将数据保存到SQLite Android

从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; 
} 

}

我曾尝试使用BOLBINTEGER 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 []我只想保存它就像图像的名称。如果有人有想法如何做,请回复。

+0

在'CTHandler'类,你正在使azon成为'Text'类型,但在插入时传递整数。请确保你传递字符串到该字段。 –

+0

我应该使用'INTEGER PRIMARY KEY'作为azon吗?我将azon保存为一个String,当我使用'citem.getAzon()'时,它返回一个String。 –

+0

在添加时,您在数据库中使用的是Azon。 –

错误代码20意味着你还没有更新的数据库版本使在database.Uninstall您的应用程序的一些变化后,然后再次运行或更新您的数据库版本的代码或尝试卸载应用程序后更改数据库名称..

+0

谢谢你给我写信,但不幸的是它不工作,我得到了同样的错误。你有其他想法吗? –

+0

我有同样的要求,我只是这样做.. – Nitesh

+1

错误代码20自带数据库存在问题,据我所见。更改数据库名称的名称或卸载应用程序,然后重试..这可能会解决您的问题。 – Nitesh

要保存图像,您需要使用BLOB数据类型。但我不知道保存网址。

请尝试这样,让我知道它的工作与否。

尝试将所有内容保存到您的数据库后做.toString();

如果它没有工作,你可以尝试下面的建议。

变化这在你的代码和

String DROP_TABLE = "DROP TABLE IF EXISTS "+TABLE_NAME; 

与此

String DROP_TABLE = db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 

如果没有作品试图一次更改数据库的名称,并给予尝试更换!

希望它会帮助。如果它没有工作让我知道。

+0

谢谢你给我写信,但不幸的是他们不工作。你有其他想法吗? –