java - 将数据从 JSON Android 保存到 SQLite

标签 java android json sqlite

我想从 JSON Web 服务将标题、整数和 url 保存到 SQLite 数据库中。我正在使用代码来执行此操作,当我使用另一个 url 时它工作得很好,但现在我总是为每个我想要保存的 JSON 对象遇到此异常:

E/SQLiteLog: (20) statement aborts at 6: [INSERT INTO categories_table(title,imageurl,azon) VALUES (?,?,?)] datatype mismatchE/SQLiteDatabase: Error inserting title=Tánctanár imageurl=http://80.99.190.2:8080/mobil/download?id=360 azon=71 android.database.sqlite.SQLiteDatatypeMismatchException: datatype mismatch (code 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;
}

}

我尝试对 imageurl 使用 BOLBINTEGER PRIMARY KEY 但没有成功。

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

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

这就是我想要保存的内容,我还希望图像的 URL 保存为 String。我不喜欢使用位图和字节[],我只想像图像的名称一样保存。如果有人知道如何做到这一点,请回复。

最佳答案

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

关于java - 将数据从 JSON Android 保存到 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38238857/

相关文章:

java - 按键事件未触发

java - spring 如何管理原型(prototype) bean 的完整生命周期?

java - AlertDialog 的问题

javascript - 使用 jquery 渲染 json

java - Spring Boot + MongoDB Id 查询

java - Android 颜色网格示例

android - 删除 Activity 布局顶部的默认投影?

android - 围绕其中心旋转自定义图像

java - 通过 REST 调用使用外键将项目添加到集合中

json - 如何在 swift 中解码 JSON