从JSON Android将数据保存到SQLite

时间:2016-07-07 06:34:21

标签: java android json sqlite

我想从JSON Web服务中将标题,整数和URL保存到SQLite数据库中。我正在使用代码执行此操作,并且当我使用其他URL时它完全正常工作但现在我总是为每个我想要保存的JSON对象获取此异常:

  

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进行图像处理但没有成功。

这是数组中的一个JSON对象:

"channel":[{"title":"MENYASSZONYI RUHA","imageurl":"http://80.99.190.2:8080/mobil/download?id=350","azon":53},

这是我想保存的内容,我也希望图片的网址保存为String。我不喜欢使用Bitmaps和byte []我只想保存,就像它是图像的名称一样。如果有人知道如何做,请回复。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

在执行.toString();

之后,尝试将所有内容保存到数据库中

如果它不起作用,你可以尝试下面的建议。

在您的代码中更改此内容

User.first.foos.where(has_bar: false)

替换为

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

如果没有任何作用,请尝试更改一次数据库名称并尝试一下!

希望它会有所帮助。如果它不起作用,请告诉我。

答案 2 :(得分:0)

错误代码20表示在对数据库进行一些更改后尚未更新数据库版本。卸载应用程序然后再次运行或更新数据库版本代码或尝试在卸载应用程序后更改数据库名称。