Store parsed xml data to sqlite ? Android
我想将setListAdapter显示的数据存储到sqlite ..怎么样?
请帮我
XML文件http://p-xr.com/xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package com.pxr.tutorial.xmltest; import java.util.ArrayList; import java.util.HashMap; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import android.app.ListActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class Main extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listplaceholder); ArrayList> mylist = new ArrayList>(); String xml = XMLfunctions.getXML(); Document doc = XMLfunctions.XMLfromString(xml); int numResults = XMLfunctions.numResults(doc); if((numResults map = new HashMap(); Element e = (Element)nodes.item(i); map.put("id", XMLfunctions.getValue(e,"id")); map.put("name","Naam:" + XMLfunctions.getValue(e,"name")); map.put("Score","Score:" + XMLfunctions.getValue(e,"score")); mylist.add(map); } ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, new String[] {"id","name","Score" }, new int[] {R.id.id, R.id.item_title, R.id.item_subtitle }); setListAdapter(adapter); /* final ListView lv = getListView(); lv.setTextFilterEnabled(true); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View view, int position, long id) { @SuppressWarnings("unchecked") HashMap o = (HashMap) lv.getItemAtPosition(position); Toast.makeText(Main.this,"ID '" + o.get("id") +"' was clicked.", Toast.LENGTH_LONG).show(); } });*/ } } |
我建议你首先解析数据,然后将其保存到数据库中然后显示。
如果您没有创建数据库,则必须先执行此操作,示例代码如何执行此操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * * @author Robert * */ public class DatabaseHelper extends SQLiteOpenHelper{ /** * Default constructor- creates database * @param context */ public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, 1); } /** * Implemented methood from SQLiteOpenHelper- called when * constructor of DatabaseHelper is called * Creates three tables (TRIP, POINT, TRANSFER) with relations * TRAVEL-POINT and POINT TRANSFER * @see SQLiteOpenHelper */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE" + TRIP_TABLE_NAME +"(_id INTEGER PRIMARY KEY AUTOINCREMENT," + FROM +" TEXT," + TO +" TEXT);"); db.execSQL("CREATE TABLE" + TRANSFER_TABLE_NAME +"(_id INTEGER PRIMARY KEY AUTOINCREMENT," + NOTE +" TEXT," + TIME +" TEXT," + DATE +" TEXT," + ADDRESS +" TEXT," + CITY +" TEXT," + COUNTRY +" TEXT," + LATITUDE +" TEXT," + LOGITUDE +" TEXT," + TRANFER_TYPE +" TEXT," + FK_POINT +" INTEGER NOT NULL REFERENCES"+ POINT_TABLE_NAME +"(_id)" +"ON DELETE CASCADE);"); db.execSQL("CREATE TABLE" + POINT_TABLE_NAME +"(_id INTEGER PRIMARY KEY AUTOINCREMENT," + NAME +" TEXT," + ADDRESS +" TEXT," + CITY +" TEXT," + COUNTRY +" TEXT," + LATITUDE +" TEXT," + LOGITUDE +" TEXT," + FK_TRAVEL +" INTEGER NOT NULL REFERENCES"+ TRIP_TABLE_NAME +"(_id)" +"ON DELETE CASCADE);"); } /** * Implemented method from SQLiteOpenHelper- we don't use it now * @see SQLiteOpenHelper */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } /** * Private fields, mainly names of columns and tables in database */ private static final String DATABASE_NAME ="TRAVELER_NOTEBOOK"; //Table names private static final String TRIP_TABLE_NAME ="TRIP"; private static final String POINT_TABLE_NAME ="POINT"; private static final String TRANSFER_TABLE_NAME ="TRANSFER"; //Columns names private static final String FROM ="FROM_PLACE"; private static final String TO ="TO_PLACE"; private static final String NAME ="NAME"; private static final String ADDRESS ="ADDRESS"; private static final String CITY ="CITY"; private static final String COUNTRY ="COUNTRY"; private static final String LATITUDE ="LATITUDE"; private static final String LOGITUDE ="LOGITUDE"; private static final String NOTE ="NOTE"; private static final String TIME ="TIME"; private static final String DATE ="DATE"; private static final String TRANFER_TYPE ="TRANSFER_TYPE"; //Foregin keys name private static final String FK_TRAVEL ="FK_TRAVEL_ID"; private static final String FK_POINT ="FK_POINT_ID"; } |
下一步是在您的活动中获取可写数据库,您可以通过创建来实现
1 | SQLiteDatabase database = (new DatabaseHelper(this).getWritableDatabase()); |
其中DatabaseHelper是数据库帮助程序类的名称。 如果你想在数据库中插入一些内容,只需要像下面那样制作一些类似的东西:
1 2 3 4 5 6 7 8 9 10 | private void processAdd(values_to_save) { ContentValues values = new ContentValues(number_of_values); values.put(column_name, value); values.put(column_name, value); if(database!=null){ database.insert(TABLE_NAME, null, values); } else{ Log.e("MyAppError","Database is null"); } } |
ContentValue类似于HashMap键值,其中键是列名和值 - 您想要插入的内容。
请记住,在每个表中,您应该有列"_id主键自动增量",因为我记得很好,您没有必要,但这会使您的项目更复杂。