存储解析XML数据的SQLite?安卓 [英] Store parsed xml data to sqlite ? Android

查看:76
本文介绍了存储解析XML数据的SQLite?安卓的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要存储其通过setListAdapter SQLite的..如何通过CA我的数据? 请帮我

XML文件 http://p-xr.com/xml

包com.pxr.tutorial.xmltest;

进口的java.util.ArrayList;
进口的java.util.HashMap;

进口org.w3c.dom.Document中;
进口org.w3c.dom.Element中;
进口org.w3c.dom.NodeList;

进口android.app.ListActivity;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.ListAdapter;
进口android.widget.ListView;
进口android.widget.SimpleAdapter;
进口android.widget.Toast;

公共类主要扩展ListActivity {
    / **第一次创建活动时调用。 * /
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.listplaceholder);

        ArrayList的> mylist中=新的ArrayList>();


        XML字符串= XMLfunctions.getXML();
        文档DOC = XMLfunctions.XMLfromString(XML);

        INT numResults = XMLfunctions.numResults(DOC);

        如果((numResults地图=新的HashMap();

            元素e =(元)nodes.item(我);
            map.put(ID,XMLfunctions.getValue(即,ID));
            map.put(名,纳摩:+ XMLfunctions.getValue(即名));
            map.put(分数,分数:+ XMLfunctions.getValue(即分数));

            mylist.add(图)
        }

        ListAdapter适配器=新SimpleAdapter(这一点,mylist中,R.layout.main,
                        新的String [] {ID,姓名,分数},
                        新的INT [] {R.id.id,R.id.item_title,R.id.item_subtitle});

        setListAdapter(适配器);

       / *最后的ListView LV = getListView();
        lv.setTextFilterEnabled(真正的);
        lv.setOnItemClickListener(新OnItemClickListener(){
            公共无效onItemClick(适配器视图父,视图中查看,INT位置,长的id){
                @燮pressWarnings(未登记)
                HashMap的O =(HashMap中)lv.getItemAtPosition(位置);
                Toast.makeText(Main.this,ID+ o.get(ID)+'被点击了。,Toast.LENGTH_LONG).show();

            }
        }); * /
    }
}

解决方案

我建议你分析数据第一,然后将其保存到数据库中,然后显示出来。

如果你没有创建数据库,你必须首先做到这一点,样品code怎么办呢娄

 进口android.content.Context;
进口android.database.sqlite.SQLiteDatabase;
进口android.database.sqlite.SQLiteOpenHelper;

/ **
 *
 * @author罗伯特·
 *
 * /
公共类DatabaseHelper扩展SQLiteOpenHelper {

        / **
         *默认constructor-创建数据库
         * @参数方面
         * /
        公共DatabaseHelper(上下文的背景下){
                超级(上下文,DATABASE_NAME,空,1);
        }

        / **
         *从SQLiteOpenHelper-实现methood调用时
         * DatabaseHelper的构造函数被调用
         *创建三个表(TRIP,点,传输)与关系
         *行驶点和点转移
         * @see SQLiteOpenHelper
         * /
        @覆盖
        公共无效的onCreate(SQLiteDatabase DB){
                db.execSQL(CREATE TABLE+ TRIP_TABLE_NAME
                                +(_id INTEGER PRIMARY KEY AUTOINCREMENT,
                                +在+TEXT
                                + TO +TEXT););
                db.execSQL(CREATE TABLE+ TRANSFER_TABLE_NAME
                                +(_id INTEGER PRIMARY KEY AUTOINCREMENT,
                                +注:+TEXT
                                +时间+TEXT
                                +日期+TEXT
                                +地址+TEXT
                                +城市+TEXT
                                +国家+TEXT
                                +纬度+TEXT
                                + LOGITUDE +TEXT
                                + TRANFER_TYPE +TEXT
                                + FK_POINT +INTEGER NOT NULL参考+ POINT_TABLE_NAME +(_ ID)
                                +ON DELETE CASCADE););
                db.execSQL(CREATE TABLE+ POINT_TABLE_NAME
                                +(_id INTEGER PRIMARY KEY AUTOINCREMENT,
                                +姓名+TEXT
                                +地址+TEXT
                                +城市+TEXT
                                +国家+TEXT
                                +纬度+TEXT
                                + LOGITUDE +TEXT
                                + FK_TRAVEL +INTEGER NOT NULL参考+ TRIP_TABLE_NAME +(_ ID)
                                +ON DELETE CASCADE););
        }

        / **
         *从SQLiteOpenHelper-实现的方法,我们现在不使用它
         * @see SQLiteOpenHelper
         * /
        @覆盖
        公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){

        }

        / **
         *私人领域,在数据库中主要的列名和表
         * /
        私有静态最后弦乐DATABASE_NAME =TRAVELER_NOTEBOOK;

        //表名
        私有静态最后弦乐TRIP_TABLE_NAME =TRIP;
        私有静态最后弦乐POINT_TABLE_NAME =点;
        私有静态最后弦乐TRANSFER_TABLE_NAME =传输;

        //列名
        私人静态最后弦乐=FROM_PLACE;
        私有静态最后字符串=TO_PLACE;

        私有静态最后字符串名称=NAME;
        私有静态最后字符串地址=地址;
        私有静态最后弦乐CITY =城市;
        私有静态最后弦乐COUNTRY =国家;
        私有静态最后弦乐LATITUDE =纬度;
        私有静态最后弦乐LOGITUDE =LOGITUDE;

        私有静态最后弦乐注=注意;
        私有静态最后弦乐TIME =TIME;
        私有静态最后弦乐日子=DATE;
        私有静态最后弦乐TRANFER_TYPE =TRANSFER_TYPE;

        // Foregin键名
        私有静态最后弦乐FK_TRAVEL =FK_TRAVEL_ID;
        私有静态最后弦乐FK_POINT =FK_POINT_ID;

}
 

下一步是获取可写数据库的活动,你可以通过创建办呢

  SQLiteDatabase数据库=(新DatabaseHelper(本).getWritableDatabase());
 

在这里DatabaseHelper是数据库的辅助类的名称。如果要插入一些东西到数据库,只是让成才呈三角状波纹管:

 私人无效processAdd(values​​_to_save){
                ContentValues​​值=新ContentValues​​(number_of_values​​);
                values​​.put(列,价值);
                values​​.put(列,价值);
                如果(数据库!= NULL){
                database.insert(TABLE_NAME,空,价值观);
                } 其他{
                    Log.e(MyAppError,数据库为空);
                }
            }
 

ContentValue是像HashMap的键值,其中关键是字段名和值 - 就是你想要的插入。 请记住,在每一个表,你应该有列_id主键自动增加我记得不错,你不必,但它使的你的项目要复杂得多。

I want to store the data which is shown by setListAdapter to sqlite .. how ca i ?? please help me

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

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(); 

            }
        });*/
    }
}

解决方案

I suggest you parse the data first then save it into database and then show.

If you didn't create database you have to do it first, sample code how to do it bellow

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

}

The next step is to get writable database in your activity, you can do it by creating

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

where DatabaseHelper is name of your database helper class. If you want to insert something into database just make someting simillar like bellow:

        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 is something like HashMap key-value where key is column name and value- that what you want insert. Remember that in each table you should have column "_id primary key auto increment" as I remember good you don't have to but it make's your project more complicated.

这篇关于存储解析XML数据的SQLite?安卓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆