Projemizde, hizmetlerden alınan verileri saklamak için veri modelleri kullanıyoruz. Bu nedenle, veri tabanına veri eklediğimizde, tüm alan adlarını almak için objModelClass.getClass(). GetDeclaredFields() yöntemini kullanırız ve bu, sınıfın tüm alan adlarını doğru bir şekilde döndürmekle kalmaz, aynı zamanda bir ek alan döndürür. Sınıfta mevcut olmayan "$ change" adıyla.
Garip olan şey, android stüdyosunda böyle bir sorun yoktu ama biz android stüdyo 2.0'a geçtiğimizde bu oldu.
Hızlı bir düzeltme uygulamam da, ancak bunu düzeltmem gerekiyor. Niçin olduğunu bilmek istiyorum?
Bu bu yöntemi
public void insertValuesIntoTable(final String strTableName, ArrayList<Object> alObjClasses,
String strPrimaryKey, String strCompositeKey) {
try {
SQLiteDatabase db_w = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
//Iterate through every model class Object in the ArrayList and transfer the contents to the DB
if (alObjClasses != null)
for (Object objModelClass : alObjClasses) {
for (Field field : objModelClass.getClass().getDeclaredFields()) {
//Encrypt value if encryption is enabled & the column is to be encrypted
try {
field.setAccessible(true);
//Test if the table received is Ignore contacts. Minor Hack inserted
//So that the same contact data model can be re used. It checks if the
//Table is of ignored constant or not then checks if the column exists
//in the table or not as that of the field name. Doing this saves
//from receiving a SQLConstraint exception stating, "Column not found"
if(field.getName().equals("$change"))
continue;
if(strTableName.equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS))
if(!field.getName().equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS_NAMES)
&& !field.getName().equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS_NUMBERS)
&& !field.getName().equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS_EMAIL)
&& !field.getName().equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS_CITY)
&& !field.getName().equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS_ID))
continue;
contentValues.put(field.getName(),
(Constants.ENCRYPTION_PREFERENCE && HelperFunctions.isColumnEncrypted(field.getName()))
? HelperFunctions.encryptString((String) field.get(objModelClass))
: (String) field.get(objModelClass));
} catch (IllegalAccessException e) {
// e.printStackTrace();
//Never thrown since field.setAccessible(true); is called before accessing data
}
catch (ClassCastException e) {
// e.printStackTrace();
//Never thrown since field.setAccessible(true); is called before accessing data
}
}
try {
if (db_w.insert(strTableName, null, contentValues) == -1)
throw new SQLiteConstraintException();
} catch (SQLiteConstraintException e) {
// e.printStackTrace();
Log.i("Error - DB", "Error occurred while trying to add data to "
+ strTableName + " Table, updating data instead.");
//Since the entry exists in the DB, it will be updated instead
updateEntryInDatabase(db_w, strTableName, strPrimaryKey, strCompositeKey, contentValues);
}
}
db_w.close();
} catch (NullPointerException e) {
// e.printStackTrace();
//Is thrown sometimes when the context of the activity which called it is destroyed mid execution
}
catch (SQLiteException e) {
// e.printStackTrace();
//Is thrown sometimes when the context of the activity which called it is destroyed mid execution
}
}
sorunum uzun alanlar [tarafından döndürülen gördüğünüzde 0'dan madde "$ değişikliği" ve 48 de öğe "serialversionuid" ..... edilir olmasıdır 48] .getLong (boş). foo [47] .getlong = 2131099695 foo [48] .getlong = 0 foo [49] .getlong = 2131099696 çok bu neden olabilir ne Stumped. – Zypps987
, daha fazla açıklık için bazı kodları gönderebilir? Bu arada probleminiz benimkiyle aynıysa, aşağıda verilen çözümleri kontrol edin. –