2016-07-07 2 views
1

Я хотел бы сохранить заголовок, целое число и 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 [] Я бы просто хотел сохранить, как это имя изображения. Если у кого-нибудь есть идея, как это сделать, ответьте.

+0

В класс 'CTHandler', вы делаете азон« типом », но передаете целое число при вставке. Убедитесь, что вы передаете 'String' в это поле. –

+0

Должен ли я использовать «INTEGER PRIMARY KEY» для azon? Я сохранил azon как String, и когда я использую 'citem.getAzon()', он возвращается с помощью String. –

+0

Добавляя, что вы используете для Azon в базе данных. –

ответ

0

Код ошибки 20 означает, что вы не обновили версию базы данных после внесения некоторых изменений в database.Uninstall приложение, а затем снова запустить или обновить базы данных версии кода или попробуйте изменить имя базы данных после удаления приложения ..

+0

Спасибо, что написали мне, но, к сожалению, он не работает, у меня такая же ошибка. У вас есть другая идея? –

+0

У меня было такое же требование, и я сделал это, как это только .. – Nitesh

+1

код ошибки 20 поставляется с проблемой существования базы данных, насколько я видел. измените имя имени базы данных или удалите приложение и повторите попытку. Это может решить вашу проблему. – Nitesh

0

Чтобы сохранить изображение, вам необходимо использовать тип данных BLOB. Но я не знаю, как сохранить URL.

0

Пожалуйста, попробуйте вот так и дайте мне знать, что сработало или нет.

Попытайтесь сохранить каждую вещь в своей БД после выполнения .toString();

Если его не сработало, вы можете попробовать ниже предложения.

Измените это в коде и

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

заменить этот

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

если ничего не работает попробуйте изменить имя БД один раз и дать попробовать!

Надеюсь, что это поможет. Если его не сработало, дайте мне знать.

+0

Спасибо, что написали мне, но, к сожалению, они не работают. У вас есть другая идея? –

Смежные вопросы