朋友!
请帮我解决我的问题。我试图从xml填充sqlite数据库,收到0错误,但数据库中的值混淆。
这是一个xml文件:
<?xml version="1.0" encoding="utf-8"?>
<cards>
<record
path="R.mipmap.ot1"
man="man1"
woman="woman1" />
<record
path="R.mipmap.ot2"
man="man2"
woman="woman2" />
</cards>
这是DBhelper类。 onUpgrade方法为空,但atm我每次都手动清除应用程序数据。
class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, "myDB", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG, "--- onCreate database ---");
String sqlStatement = "CREATE TABLE IF NOT EXISTS mytable( id INTEGER PRIMARY KEY AUTOINCREMENT, path TEXT, man TEXT, woman TEXT)";
db.execSQL(sqlStatement);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
这是将数据从xml导入数据库
的部分 dbHelper = new DBHelper(this);
ContentValues cv = new ContentValues();
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("mytable", null, null);
Resources res = this.getResources();
ContentValues values = new ContentValues();
XmlResourceParser _xml = res.getXml(R.xml.cardslist);
try {
int eventType = _xml.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if ((eventType == XmlPullParser.START_TAG)
&& (_xml.getName().equals("record"))) {
String path = _xml.getAttributeValue(0);
String man = _xml.getAttributeValue(1);
String woman = _xml.getAttributeValue(2);
values.put("path", path);
values.put("man", man);
values.put("woman", woman);
db.insert("mytable", null, values);
Log.d(LOG_TAG, "success");
}
eventType = _xml.next();
}
}
// Catch errors
catch (XmlPullParserException e) {
Log.e("Test", e.getMessage(), e);
} catch (IOException e) {
Log.e("Test", e.getMessage(), e);
} finally {
// Close the xml file
_xml.close();
}
dbHelper.close();
所以我想收到
path = R.mipmap.ot1 man = man1 woman = woman1
R.mipmap.ot2 man2 woman2
但收到
path=man1 man=R.mipmap.ot1 woman=woman1
man2 R.mipmap.ot2 woman2
请帮我解决这个问题。 非常感谢。
答案 0 :(得分:0)
在循环中移动while (eventType != XmlPullParser.END_DOCUMENT) {
ContentValues values = new ContentValues();
if ((eventType == XmlPullParser.START_TAG)
&& (_xml.getName().equals("record"))) {
String path = _xml.getAttributeValue(0);
String man = _xml.getAttributeValue(1);
String woman = _xml.getAttributeValue(2);
values.put("path", path);
values.put("man", man);
values.put("woman", woman);
db.insert("mytable", null, values);
Log.d(LOG_TAG, "success");
}
eventType = _xml.next();
}
声明:
values.clear()
或者您可以在每次迭代开始时使用ContentValues
,我认为这可能比声明新的{{1}}对象更好。
答案 1 :(得分:0)
问题解决了,原因是XmlPullParser按字母顺序解析xml中的数据。所以我只是将路径重命名为apath。