您的位置:首页 > 移动开发 > Android开发

读取SDcard Database并在Android ListView显示的处理流程

2014-03-10 10:21 399 查看
原文地址:http://www.cnblogs.com/-run/archive/2011/11/30/2269390.html点击打开链接







虽然整个功能比较简单,但要掌握的东西还是很多的
完成整个功能主要需要以下几点内容:
一. 申请SDcard权限,让程序可以在SDcard创建文件夹和数据库文件
二. 创建一个ListView Activity 和 Activity对应的list.xml layout
三. 使用 SQLiteDatabase 来管理 SQL , execute SQL commands, and perform other common database management tasks
四. 使用 Adapter 把数据映射到ListView ,且把数据传到TextView等控件中显示出来(这位同学有关于Adapter相关资料:Android开发——说说Adapter那点事

首先来设置SDcard的权限,加上uses-permission

AndroidManifest.xml



<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

创建listview元素文件:
布局layout中, android:descendantFocusability="blocksDescendants" 这个属性尤其关键, 如果你需要在listview里添加按钮什么的,就需要添加这个元素,使listview不把按钮的焦点覆盖
list.xml

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

创建MyListViewActivity 继承 ListActivity , 它和Activity差不多,只是多了对ListView的一些优化
MyListViewActivity.java 按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

配置文件,定义各种常量和变量,方便重复使用

config.java

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

自定义函数文件
function.java

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

adb查看数据sdcard数据库



补充一下,如果你需要把现有的数据库放到SDcard的话,(既是用户安装使用该软件的时候,把已经装好数据的Database放到SDcard)
先把处理好的数据库放在assets文件夹中,然后当程序第一次运行的时候,就把数据库复制到SDcard
第一步,复制已经处理好的database.db放在assets文件夹
第二步,在程序的第一个Activity判断用户的SDcard中是否已经存在这个数据库文件
第三步,若不存在,则进行复制







public void createDataBase() throws IOException{          
        File dbdir = config.path;
        if(!dbdir.exists()){ 
            dbdir.mkdirs(); 
        } 
        if(!config.f.exists()){
            config.f.createNewFile();  
            SQLiteDatabase.openOrCreateDatabase(config.f, null);
            copyDataBase();
        }
    }
    
    private void copyDataBase() throws IOException {
        InputStream myInput;
        //复制到的目标路径
        String outFileName = config.CR_URL_DBTABLE; 
        OutputStream myOutput = new FileOutputStream(outFileName);
        //获取Assets文件夹中的databae.db
        myInput = this.getAssets().open(config.CR_DBNAME);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }
        myOutput.flush();
        myInput.close();
        myOutput.close();
    }





作者:那瞬间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: