2016-07-07 196 views
1

我想從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。 –

回答

0

錯誤代碼20意味着你還沒有更新的數據庫版本使在database.Uninstall您的應用程序的一些變化後,然後再次運行或更新您的數據庫版本的代碼或嘗試卸載應用程序後更改數據庫名稱..

+0

謝謝你給我寫信,但不幸的是它不工作,我得到了同樣的錯誤。你有其他想法嗎? –

+0

我有同樣的要求,我只是這樣做.. – Nitesh

+1

錯誤代碼20自帶數據庫存在問題,據我所見。更改數據庫名稱的名稱或卸載應用程序,然後重試..這可能會解決您的問題。 – Nitesh

0

要保存圖像,您需要使用BLOB數據類型。但我不知道保存網址。

0

請嘗試這樣,讓我知道它的工作與否。

嘗試將所有內容保存到您的數據庫後做.toString();

如果它沒有工作,你可以嘗試下面的建議。

變化這在你的代碼和

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

與此

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

如果沒有作品試圖一次更改數據庫的名稱,並給予嘗試更換!

希望它會幫助。如果它沒有工作讓我知道。

+0

謝謝你給我寫信,但不幸的是他們不工作。你有其他想法嗎? –

相關問題