¿Almacenar datos xml analizados en sqlite? Androide

Quiero almacenar los datos que se muestran en setListAdapter en sqlite .. ¿cómo puedo? por favor, ayúdame

Archivo XML http://p-xr.com/xml

paquete 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; importar android.app.ListActivity; importar android.os.Bundle; importar android.view.View; importar android.widget.AdapterView; importar android.widget.AdapterView.OnItemClickListener; importar android.widget.ListAdapter; importar android.widget.ListView; importar android.widget.SimpleAdapter; importar android.widget.Toast; public class Main extiende ListActivity {/ ** Se llama cuando se crea la actividad por primera vez. * / @Override public void onCreate (Bundle SavedInstanceState) {super.onCreate (SavedInstanceState); setContentView (R.layout.listplaceholder); ArrayList> mylist = new ArrayList> (); Cadena xml = XMLfunctions.getXML (); Documento 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 ("nombre "," Naam: "+ XMLfunctions.getValue (e," nombre ")); map.put (" Score "," Score: "+ XMLfunctions.getValue (e," score ")); mylist.add (mapa) ;} 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 (adaptador); / * final ListView lv = getListView (); lv.setTextFilterEnabled (true); lv.setOnItemClickListener (nuevo OnItemClickListener () {public void onItemClickListener () {public void onItemClickListener () view, int position, long id) {@SuppressWarnings ("sin marcar") HashMap o = (HashMap) lv.getItemAtPosition (posición); Toast.makeText (Main.this, "ID '" + o.get ("id") Se hizo clic en + "'.", Toast.LENGTH_LONG) .show ();}}); * /}}

preguntado el 18 de abril de 11 a las 09:04

1 Respuestas

Le sugiero que primero analice los datos, luego los guarde en la base de datos y luego los muestre.

Si no creó la base de datos, debe hacerlo primero, código de muestra de cómo hacerlo a continuación

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";

}

El siguiente paso es obtener una base de datos grabable en su actividad, puede hacerlo creando

SQLiteDatabase database = (new DatabaseHelper(this).getWritableDatabase());

donde DatabaseHelper es el nombre de la clase auxiliar de la base de datos. Si desea insertar algo en la base de datos, simplemente haga algo similar como a continuación:

        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 es algo así como el valor-clave de HashMap, donde la clave es el nombre y el valor de la columna, que es lo que desea insertar. Recuerde que en cada tabla debe tener la columna "_id incremento automático de clave primaria", ya que recuerdo bien que no es necesario, pero hace que su proyecto sea más complicado.

Respondido el 10 de Septiembre de 12 a las 13:09

gracias robert ... ahora estoy obteniendo cómo crear una base de datos, ... pero ¿cómo puedo insertar datos xml analizados en la base de datos sqlite ... 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 (adaptador); ver este código ... - Ajay Patel

Ok, entonces ya estás analizando xml y construyendo listview, ¿estoy en lo cierto? ¿Y dime que necesitas poner todos estos elementos o seleccionar uno? - Robert

sí, correcto ... ya lo analicé y genere una vista de lista ... ahora quiero almacenar todos los elementos en sqlite ... por favor ayuda .. - Ajay Patel

En mi opinión, será mejor almacenarlo primero y que generar una vista con elementos;). Como veo, tiene una lista con hashmap, base de datos hecha con tabla con 3 columnas, hecha por ejemplo para (i = 0; i <mylist.size (); i ++) dentro de la función put processAdd con tres parámetros que tendrá que poner en ContentValue luciré como processAdd (mylist.get (i) .get ("id"), mylist.get (i) .get ("name"), mylist.get (i) .get ("id") ); processAdd debes crear de acuerdo a la función que te dejé;) Como dije, si tienes más preguntas escríbeme un correo electrónico :) - Robert

private void processAdd (String str1, String str2, String str3) {Valores de ContentValues ​​= nuevos ContentValues ​​(3); valores.put (nombre_columna, cadena1); values.put (column_name, str2); values.put (column_name, str3) if (database! = null) {database.insert (TABLE_NAME, null, values); } else {Log.e ("MyAppError", "La base de datos es nula"); }} Mejor solo envíame el código - Robert

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.