我想把一個普通的POJO放到ContentValues中,並在ContentProvider中解組它。如何編組/將ContentValues插入到ContentProvider的泛型類型?
我一直令人頭大我的小腦復:Parcelables並,ContentValues,並插入到SQLite的 關於: http://njzk2.wordpress.com/2013/05/31/map-to-contentvalues-abusing-parcelable/
How to write a common code for inserting data in android's Sqlite
我一直在試圖插入android.location.Location成通過ContentProvider SQLite:
Location loc = mLocationClient.getLastLocation();
myParcel = android.os.Parcel.obtain();
loc.writeToParcel(myParcel, 0);
ContentValues values = ContentValues.CREATOR.createFromParcel(myParcel);
填充值/宗地。
問題1) 這裏是我的ContentProvider.insert方法:
@Override
public Uri insert(final Uri uri, final ContentValues values){
SQLiteDatabase db = Mydatabase.getWritableDatabase();
//db.insert() doesn’t unmarshal the values??
db.insert( myTABLE_NAME, 「」, values);
Uri result = null;
db.close();
return result;
}
失敗的原因是db.insert()沒有解組值(我相信) 錯誤插入android.database.sqlite .SQLiteException:INSERT INTO myTABLE_NAME()VALUES(NULL)
問題2) 是否有某種方法可以先將值解組,然後再將其編組回到另一個ContentValues變量中?也許w/getKey()?
這恐怕是行不通的。如果你遵循'insert'的源代碼,你會發現來自'ContentValues'的值傳遞給'bindOjectToProgram',這是構建查詢的最後一步。在這種方法中,測試對象的類型。 'Location'不是一個已知類型,這意味着表中的數據最終是'toString'表示。 – njzk2 2014-10-10 23:50:33
將POJO放入地圖(並將識別的類型放入ContentValues中)需要更多的工作。您可以查看'Gson',因爲它提供了從對象到JSON的映射,實際上它提供了一種從對象映射到與SQL兼容的映射的方式。 – njzk2 2014-10-10 23:53:37
否則,這是我寫的其他文章的主題:http://njzk2.wordpress.com/2013/07/09/storage-is-simple-part-1-sql/其中我經過的基礎對象映射。這個想法是,你需要找出一種方法來告訴sql如何處理你需要存儲的每種類型。 – njzk2 2014-10-10 23:55:42