09-12 15:24:33.903: W/System.err(19499): java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[])' on a null object reference
09-12 15:25:25.763: E/SQLiteDatabase(19499): Failed to open database '/storage/sdcard1/ArcGIS/xxxxx.db'.
09-12 15:25:25.763: E/SQLiteDatabase(19499): android.database.sqlite.SQLiteException: not an error(Sqlite code 0): Could not open the database in read/write mode.,(OS error - 13:Permission denied)
09-12 15:25:25.763: E/SQLiteDatabase(19499): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
--------------------------------------------------------------------------------------------------------------------

2.3中声明

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

可以读写SDCARD,包括其他storage,比如内部flash,usb等等

4.0中如果只声明这个,会发现其他mount的设备有可能没有写权限,需要同时声明

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

这样才可以读写/mnf/flash , /mnt/usb, /mnt/externa等目录

可能4.0增加了对其他存储设备的内建支持,其他设备不再共享gid "sdcard_rw"

而改用"media_rw",相应的细分了权限声明

2.3中 dr-xrwxr-x system   sdcard_rw          1969-12-31 16:00 flash

4.0中 d---rwxr-x system   media_rw          1970-01-01 08:00 flash

权限控制文件在 frameworks/base/data/etc/platform.xml:

  1. <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
  2. <group gid="sdcard_rw" />
  3. </permission>
  4. <permission name="android.permission.WRITE_MEDIA_STORAGE" >
  5. <group gid="media_rw" />
  6. </permission>
4.4 开始限制第三方应用对外置存储卡(一般为外置可插拔TF卡)的读写权限,要申请到这个权限需要申请 WRITE_MEDIA_STORAGE 权限,而这个权限是需要系统签名才能生效的.
不过有些手机厂家会放开这个权限,使得应用申请了 WRITE_EXTERNAL_STORAGE 就可以访问外置存储卡 (相当于和4.4前一样了),这也是为了兼容之前应用做的折中.这么做的厂家也在逐渐减少. 限制读写外置存储卡,自然是为了类似用户隐私这类的需求考虑的.
比如,每个应用都在里面写东西,外置存储卡目录就会很乱.而作为可插拔卡,用户是会将此卡挂载到其他设备上的(比如PC),这时候用户就会面对的是一大堆不知所然的目录. 其实外置存储卡在4.4后还是可以读写的,只是Android对其做了限制.
第三方应用读写外置存储卡,仅限 Android/data/<Package.Name> 这一个目录(和内置存储卡对应目录一样) 5.1.1 查看etc/permissions/platform.xml,存在 WRITE_MEDIA_STORAGE 节点,AndroidManifest.xml增加<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
Eclipse会提示错误,需要clean一下当前工程,没有错误提示,可以编译,但依旧不能读取根目录中指定文件夹数据。

临时解决方案:在SD卡、USB设备中,创建 Android/data/<Package.Name> 文件夹,将数据移动到该目录之中。

参考资料:
http://blog.csdn.net/zmyde2010/article/details/7031461
http://blog.csdn.net/eustoma/article/details/7108144
https://zhidao.baidu.com/question/136950531811948485.html

Android 读写位于SD卡上的sqlite数据库文件错误问题的更多相关文章

  1. android中读取SD卡上的数据

    通过Context的openFileInput或者openFileOutput打开的文件输入输出流是操作应用程序的数据文件夹里的文件,这样存储的大小比较有限,为了更好的存取应用程序的大文件数据,应用程 ...

  2. Android开发之SD卡上文件操作

    1. 得到存储设备的目录:/SDCARD(一般情况下) SDPATH=Environment.getExternalStorageDirectory()+"/"; 2. 判断SD卡 ...

  3. Android 读取手机SD卡根目录下某个txt文件的文件内容

    1.先看activity_main.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...

  4. android开发之-查看、编辑手机sqlite数据库文件-实测

    效果图: 1.开始——运行——输入cmd ,输入adb shell,错误:一是“adb不是内部命令或外部命令,也不是可运行的程序或批处理文件”,二是“error:device not found”. ...

  5. android进入adb shell步骤及修改sqlite数据库文件的权限

    1 准备工作 (1)将adb.exe从  \Sdk\platform-tools目录下移动到 \Sdk\tools目录下(主要是看emulator这几个文件在哪个文件夹就把adb.exe移动到哪个文件 ...

  6. android打开存储卡(TF卡\SD卡)中的sqlite文件

    android的SDK直接支持sqlite3的API.   打开SD卡上面的sqlite数据库,不需要SQLiteOpenHelper的继承类.只需要,SQLiteDatabase中的一些静态方法.如 ...

  7. android 操作SD卡上的文件

    (1)说明:操作SD卡上的文件须要增加下面权限  在SD卡上创建和删除文件权限  <uses-permission android:name="android.permission.M ...

  8. android学习笔记47——读写SD卡上的文件

    读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...

  9. Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上

    假设使用默认的系统管理,默认放在包以下.比較省心.并且在卸载app后不会造成数据残留.可是这样也有一个问题.比方我做一个背单词的软件,那么当用户卸载掉这个app时,他辛辛苦苦下载的单词库也没了... ...

随机推荐

  1. dp之多维背包hdu2159

    二维背包问题,我是觉得这个题目数据比较水,虽然它最后说了怪可以无限个,但是它却只能最多杀s个,也就是所有品种的怪最多为s个,那么就是二维完全背包的问题了.......同时,它没有说一定要杀s只怪,所以 ...

  2. c++包管理工具conan

    Conan is a portable package manager, intended for C and C++ developers, but it is able to manage bui ...

  3. javascript publish/subscribe or observer pattern

     定义 定义一对多的对象封装,目标对象状态发生变化,它所有的接受者都会收到通知并做相应的更新. 使用频率:5/5 最高 概要 观察者模式,也就是发布者/订阅者模式,当发布者发布一个通知的时候,订阅者就 ...

  4. 搭建一个单纯学习hibernate的项目

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  5. 【转】Visual Studio常用快捷键

    Shift+Alt+Enter: 切换全屏编辑   Ctrl+B,T / Ctrl+K,K: 切换书签开关 Ctrl+B,N / Ctrl+K,N: 移动到下一书签 Ctrl+B,P: 移动到上一书签 ...

  6. 【C#/WPF】窗体定时自动关闭

    需求:打开WPF项目后,展示3秒钟产品Logo后,进入主界面MainWindow.(类似于安卓应用打开时的闪屏页SplashPage) 思路:在进入MainWindow后新建一个Window窗体,窗体 ...

  7. lighttpd + php 移植配置

    buildroot 内添加 lighttpd 和php 等相关选项 // make menuconfig Target packages ---> Interpreter languages a ...

  8. Ajax类

    ajax.js -------------------------[ajax类]-------------------------- function Ajax(recvType){ var aj=n ...

  9. ggplot2——简介

    ggplot2是R语言最为强大的作图软件包,强于其自成一派的数据可视化理念.当熟悉了ggplot2的基本套路后,数据可视化工作将变得非常轻松而有条理. 本文主要对ggplot2的可视化理念及开发套路做 ...

  10. jQuery Form插件详解

    <script src="js/jquery.form.js" type="text/javascript"></script> Jqu ...