android访问自定义文件出现的问题

ContentProvider package com.example.tigongzhe; import android.R.integer; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; import android.provider.SyncStateContract.Helpers; import android.text.Selection; import android.util.Log; public class provider extends ContentProvider { private MyOpenHelper myOpenHelper; private SQLiteDatabase sqLiteDatabase; private static final UriMatcher URI_MATCHER=new UriMatcher(UriMatcher.NO_MATCH); private final String TAG="provider"; private static final String authority="com.example.tigongzhe.provider"; static { URI_MATCHER.addURI(authority, "contacter", 1); URI_MATCHER.addURI(authority, "contacter/#", 2); } private static final String _id="id"; private static final String name="name"; private static final String num="num"; @Override public boolean onCreate() { // TODO Auto-generated method stub myOpenHelper=new MyOpenHelper(getContext(), DB_Name, null, version_1); return true; } @Override public String getType(Uri uri) { // TODO Auto-generated method stub int flag=URI_MATCHER.match(uri); switch (flag) { case 2: return "vnd.android.cursor.item/contacter"; case 1: return "vnd.android.dir.item/contacter"; default: throw new IllegalArgumentException("异常参数"); } } @Override public Uri insert(Uri uri, ContentValues values) { // TODO Auto-generated method stub sqLiteDatabase=myOpenHelper.getWritableDatabase(); int flag=URI_MATCHER.match(uri); switch (flag) { case 1: sqLiteDatabase.insert(Table_Name, name, values); break; case 2: long id=sqLiteDatabase.insert(Table_Name, name, values); ContentUris.withAppendedId(uri, id); default: break; } return uri; } @Override public Cursor query(Uri uri, String[] arg1, String arg2, String[] arg3, String arg4) { // TODO Auto-generated method stub Cursor cursor; sqLiteDatabase=myOpenHelper.getReadableDatabase(); int flag=URI_MATCHER.match(uri); switch (flag) { case 1: cursor=sqLiteDatabase.query(Table_Name, arg1, arg2, arg3, null, null,arg4); break; case 2: long id=ContentUris.parseId(uri); arg2=(arg2==null||"".equals(arg2.trim()))? _id+"="+id:arg2+"and"+_id+"="+id; cursor=sqLiteDatabase.query(Table_Name, arg1, arg2, arg3, null, null,arg4); default: throw new IllegalArgumentException("参数错误"); } return cursor; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO Auto-generated method stub int num=0; sqLiteDatabase=myOpenHelper.getWritableDatabase(); int flag=URI_MATCHER.match(uri); switch (flag) { case 1: num=sqLiteDatabase.update(Table_Name, values,selection, selectionArgs); break; case 2: long id=ContentUris.parseId(uri); selection=(selection==null||"".equals(selection.trim()))? _id+"="+id:selection+"and"+_id+"="+id; num=sqLiteDatabase.update(Table_Name, values,selection, selectionArgs); default: break; } return num; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { // TODO Auto-generated method stub int num=0; sqLiteDatabase=myOpenHelper.getWritableDatabase(); int flag=URI_MATCHER.match(uri); switch (flag) { case 1: num=sqLiteDatabase.delete(Table_Name, selection, selectionArgs); break; case 2: long id=ContentUris.parseId(uri); selection=(selection==null||"".equals(selection.trim()))?_id+"="+id:selection+"and"+_id+"="+id; num=sqLiteDatabase.delete(Table_Name, selection, selectionArgs); default: throw new IllegalArgumentException("异常参数"); } return num; } private final String DB_Name = "mydb.db"; private final String Table_Name="contacter"; private final int version_1=1; private class MyOpenHelper extends SQLiteOpenHelper { public MyOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } /** * @description 当数据表无连接时创建新的表 */ @Override public void onCreate(SQLiteDatabase db) { String sql = " create table if not exists " + Table_Name + "(id INTEGER PRIMARY KEY AUTOINCREMENT," + "name varchar(64),num varchar(64))"; db.execSQL(sql); } /** * @description 当版本更新时触发的方法 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = " drop table if exists " + Table_Name; db.execSQL(sql); onCreate(db); } } } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.tigongzhe" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.tigongzhe.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <provider android:name=".provider" android:authorities="com.example.tigongzhe.provider" android:multiprocess="true" android:exported="true" android:permission="com.example.tigongzhe.permission" ></provider> </application> <permission android:name="com.example.tigongzhe.permission" android:protectionLevel="normal"></permission> </manifest> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++package com.example.tigongzhe; import android.R.integer; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; import android.provider.SyncStateContract.Helpers; import android.text.Selection; import android.util.Log; public class provider extends ContentProvider { private MyOpenHelper myOpenHelper; private SQLiteDatabase sqLiteDatabase; private static final UriMatcher URI_MATCHER=new UriMatcher(UriMatcher.NO_MATCH); private final String TAG="provider"; private static final String authority="com.example.tigongzhe.provider"; static { URI_MATCHER.addURI(authority, "contacter", 1); URI_MATCHER.addURI(authority, "contacter/#", 2); } private static final String _id="id"; private static final String name="name"; private static final String num="num"; @Override public boolean onCreate() { // TODO Auto-generated method stub myOpenHelper=new MyOpenHelper(getContext(), DB_Name, null, version_1); return true; } @Override public String getType(Uri uri) { // TODO Auto-generated method stub int flag=URI_MATCHER.match(uri); switch (flag) { case 2: return "vnd.android.cursor.item/contacter"; case 1: return "vnd.android.dir.item/contacter"; default: throw new IllegalArgumentException("异常参数"); } } @Override public Uri insert(Uri uri, ContentValues values) { // TODO Auto-generated method stub sqLiteDatabase=myOpenHelper.getWritableDatabase(); int flag=URI_MATCHER.match(uri); switch (flag) { case 1: sqLiteDatabase.insert(Table_Name, name, values); break; case 2: long id=sqLiteDatabase.insert(Table_Name, name, values); ContentUris.withAppendedId(uri, id); default: break; } return uri; } @Override public Cursor query(Uri uri, String[] arg1, String arg2, String[] arg3, String arg4) { // TODO Auto-generated method stub Cursor cursor; sqLiteDatabase=myOpenHelper.getReadableDatabase(); int flag=URI_MATCHER.match(uri); switch (flag) { case 1: cursor=sqLiteDatabase.query(Table_Name, arg1, arg2, arg3, null, null,arg4); break; case 2: long id=ContentUris.parseId(uri); arg2=(arg2==null||"".equals(arg2.trim()))? _id+"="+id:arg2+"and"+_id+"="+id; cursor=sqLiteDatabase.query(Table_Name, arg1, arg2, arg3, null, null,arg4); default: throw new IllegalArgumentException("参数错误"); } return cursor; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO Auto-generated method stub int num=0; sqLiteDatabase=myOpenHelper.getWritableDatabase(); int flag=URI_MATCHER.match(uri); switch (flag) { case 1: num=sqLiteDatabase.update(Table_Name, values,selection, selectionArgs); break; case 2: long id=ContentUris.parseId(uri); selection=(selection==null||"".equals(selection.trim()))? _id+"="+id:selection+"and"+_id+"="+id; num=sqLiteDatabase.update(Table_Name, values,selection, selectionArgs); default: break; } return num; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { // TODO Auto-generated method stub int num=0; sqLiteDatabase=myOpenHelper.getWritableDatabase(); int flag=URI_MATCHER.match(uri); switch (flag) { case 1: num=sqLiteDatabase.delete(Table_Name, selection, selectionArgs); break; case 2: long id=ContentUris.parseId(uri); selection=(selection==null||"".equals(selection.trim()))?_id+"="+id:selection+"and"+_id+"="+id; num=sqLiteDatabase.delete(Table_Name, selection, selectionArgs); default: throw new IllegalArgumentException("异常参数"); } return num; } private final String DB_Name = "mydb.db"; private final String Table_Name="contacter"; private final int version_1=1; private class MyOpenHelper extends SQLiteOpenHelper { public MyOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } /** * @description 当数据表无连接时创建新的表 */ @Override public void onCreate(SQLiteDatabase db) { String sql = " create table if not exists " + Table_Name + "(id INTEGER PRIMARY KEY AUTOINCREMENT," + "name varchar(64),num varchar(64))"; db.execSQL(sql); } /** * @description 当版本更新时触发的方法 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = " drop table if exists " + Table_Name; db.execSQL(sql); onCreate(db); } } } 立即下载

android访问自定义文件出现的问题

在android项目中自定义一个配置文件,并访问时出现找不到路径或文件不存在的问题并报如下异常:

/data/data/huazi.helloworld/files/user.properties (No such file or directory)

分析:形同sharpreference的文件一般都是保存在“/data/data/huazi.helloworld/files/”这个路径下,虚拟机在查找相关文件时也是在路径下查找。自己在项目中新建的文件,都是保存在项目文件夹下,所以找不到相关文件。

解决办法:将相关的配置文件导入到虚拟机上去。

在DDMS的File Explorer中将相关的文件导入到/data/data/huazi.helloworld/files 文件夹中去。找到项目的文件夹后

点击手机图标导入相关文件即可。(注意android中的文件的访问权限的问题)


Android7.0 自定义文件管理器 获取文件夹路径 自定义文件管理器 模仿真实文件管理器,里面的逻辑皆可以自己手动修改,应为需所以去写了个获取文件夹路径demo,本人手机Android7.0亲测。 立即下载

相关推荐

Android自定义文件浏览器简单demo项目

自定义的一个简单的文件浏览器的demo。是从根目录下开始浏览的。图标定义都有。留有接口,可以自己添加各个文件不同图标。

Android不同版本SD卡存储权限解决

1.Android6.0之前: 6.0之前是不需要动态申请权限的,直接在manifest中申请即可以正常使用。 <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.xt.client"> <uses-permission android:name="andro

qingshui1234567的博客 6929

Cartool实战:手把手教你完成静息态EEG微状态分析的组水平聚类与模板匹配

本文详细解析了使用Cartool进行静息态EEG微状态分析的组水平聚类与模板匹配全流程。从数据准备、算法选择到参数优化,提供了k-means与T-AAHC算法的实操建议,帮助研究者避开常见陷阱,获得可靠分析结果。特别针对最优类别数确定、模板匹配参数设置等核心环节进行深入探讨,适用于认知神经科学领域的EEG微状态研究。

weixin_31220401的博客 263

android 12版本文件操作需要的权限,需要跳转设置页面,提醒用户手动设置

android 12版本文件操作需要的权限,需要跳转设置页面,提醒用户手动设置

5133

陀螺仪及四元数解算

陀螺仪 四元数

zb313982521的博客 2008

空频、空时、空域、时域、频域抗干扰介绍

1、时域抗干扰:对时间域序列进行滤波,滤波系数h(n),采样序列不断进行输入与滤波系数卷积计算,得到响应输出;例如常用的FIR和IIR滤波器。 对于多窄带干扰噪声源和连续波干扰源有较好的处理效果,还可以解决多径问题; 可以通过在接收机前端处理中增加一个嵌入式块实现; 2、频域抗干扰:接收机不容易受到相对于接收机频带以外的强功率干扰; 通常为带通滤波和阻带滤波, 适用于窄带干扰噪声源,连续波干扰源以及较强的频带外干扰噪声源, 3、空域抗干扰:通过多个自适应天线按照特定组合成天线阵列,波束成形,针对

qq_43517907的博客 7308

安卓学习笔记:安卓11访问/读写 Android/data 目录

这里有一点需注意,当我们的子fragment是父fragment通过viewPager容器添加进去的时候,没有Tag也没有ID,如何精准的设置给需要的这个回调的子fragment呢?总结:先在清单文件申请权限,然后在程序中动态申请,其次在需要授权的activity(或fragment)中启用SFA框架,最后在回调回来的activity中重写onActivityResult,如果是多层嵌套的fragment,则通过tag或id或position找到对应的fragment,一层一层的传递过去。

qq_14826519的博客 9364

1688店铺所有商品API接口(整店商品查询API接口)

1688店铺所有商品API接口、1688店铺列表API接口,1688店铺API接口,1688店铺查询商品API接口,1688店铺商品API接口,1688店铺详情接口,1688商品API接口

tbprice的博客 1571

Android 读取目录中的文件列表并展示

根据客户的需求,今天安卓应用中要加一个功能,打开指定目录,并展示其中的文件列表,选中其中一个,就打开,目录如下: 这个需求比较笼统,并且包含的细节也比较多,因此分布实现: 一. 布局文件    ScrollView滚动列表: <ScrollView android:layout_width="fill_parent" android:layout_height

小鹰信息技术服务部 2万+

【一键搞定】ThinkPHP6.0.2+PHPStudy+Composer极速安装指南——附完整下载包与避坑技巧

本文提供了一份ThinkPHP6.0.2的完整下载包,并详细介绍了如何配合PHPStudy和Composer进行极速安装与配置。指南涵盖了环境准备、Composer国内镜像加速、项目部署及常见避坑技巧,旨在帮助开发者,尤其是内网或网络不佳的用户,快速搭建可运行的TP6开发环境,绕过依赖下载的繁琐步骤。

assembly8low的博客 1008

逆向实战:从x-mini签名到RPC调用,Frida动态分析小红书加密协议

本文通过实战案例,详细拆解了小红书App的加密协议逆向分析过程。从识别x-mini签名等关键参数入手,结合静态分析与Frida动态Hook技术,追踪到核心的RPC调用入口,并最终封装成可独立调用的RPC函数,为安全研究和协议理解提供了完整的技术路径。

moss5的博客 1036

https://geewu.gitbooks.io/rabbitmq-quick/content/RabbitMQ%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C.html

https://geewu.gitbooks.io/rabbitmq-quick/content/RabbitMQ%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C.html

weixin_33725126的博客 594

【运动规划算法项目实战】如何使用Pure Pursuit算法进行路径跟踪(附ROS C++代码)

在自动驾驶和机器人导航领域,路径跟踪是一项关键技术,它使车辆或机器人能够按照预定的路径规划进行移动。路径跟踪算法的选择对于系统性能和安全性至关重要。本文将介绍一种常用且有效的路径跟踪算法——Pure Pursuit算法。我们将详细讨论Pure Pursuit算法的原理、实现步骤以及如何在自动驾驶和机器人系统中应用该算法进行路径跟踪。Pure Pursuit是一种用于路径跟踪的控制算法。它通过计算角速度控制机器人从当前位置移到机器人前方的某个预瞄点。假定线速度是恒定的,当然可以随意更改机器人的线速度。

xiewf的博客 1万+

react-native-fs 安卓端访问https服务器报错java.security.cert.CertPathValidatorException

完整报错信息为:java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.经过排查发现http服务器下载没什么问题,但是配置了CA证书的https安全连接服务器,iOS端没问题,安卓端就直接报这个异常了。废话不多说,附上解决方法。需要在安卓项目中react-native-...

lzm150的博客 6446

Allegro快速编辑丝印文字操作指导

选择setup-Application Mode-placement edit。Allegro支持丝印文字的编辑,下面介绍快速编辑丝印文字的两种方法如下。这个功能还支持拷贝粘贴,可以从其它地方拷贝过来,免去了书写的麻烦。出现text edit窗口,输入自己需要的文字,点击ok。鼠标移动到丝印文字位置,文字会被高亮起来。Allegro快速编辑丝印文字操作指导。点击丝印文字,丝印会被高亮起来。选择Text edit 命令。输入需要更改后的文字,如下。右击选择text edit。以编辑下方丝印文字为例。

weixin_54787054的博客 4194

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android 自定义 permission 权限

大家好,今天给大家简单分享一下Android中自定义action与permission. 我们在实际开发中,经常会用到系统的功能,比如打电话功能只要如以下简单代码: view plaincopy to clipboardprint? Uri uri =

浮生若梦 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android中content类型url转换绝对文件地址安卓自带文件管理器的大坑

项目场景: 提示:这里简述项目相关背景: 做了一个安卓毕设,因为不想用服务器,所以图片资源在保存时只保存了本地的路径地址类似: /storage/emulated/0/Pictures/1C15583A.jpg 这种在打开时候只需要 imgView.setImageURI(Uri.fromFile(new File("/storage/emulated/0/Pictures/1C15583A.jpg"))) //如果函数有错请自行判断,临时写的 但是我在上传路径时,用的是安卓自带文件管理器,在返回过程我获

coloskk的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

uniapp微信小程序pdf预览,且可以添加自定义水印(兼容安卓和ios)

我遇到的问题是:pdf文件在浏览器上访问是有水印的,但是通过pdfjs转成的预览,会直接忽略掉文档中的水印层,导致原本pdf文件有的水印,使用pdfjs渲染的内容没有水印,于是我就自己添加水印仅用于查看。} else {});}).promise;i++) {// 自定义水印的文字// pdfFile这个是本地pdf文件用来调试。

weixin_43818906的博客 1727

java 安卓 html文件怎么打开方式_android 浏览器 打开本地html文件的方法

android 浏览器 打开本地html文件的方法有些html文件放在本地磁盘和sdcard,如何用打开这个网页呢?这种应用在测试时非常有用。有2个方法:1. 使用文件管理器如ES等,需要幸运的是你的文件管理器直接用浏览器打开。2. 在浏览器输入地址访问本地磁盘和SD卡上的HTML,前部分content://com.android.htmlfileprovider是Provider的标准,后面是程...

weixin_39646021的博客 1105

Android Hidden API 部署指南:如何正确配置自定义 android.jar 文件

Android Hidden API 是一个强大的库,提供了访问 Android 隐藏 API 和内部资源的能力。本指南将详细介绍如何正确配置自定义 android.jar 文件,帮助开发者充分利用该库的功能,轻松访问 Android 系统中的隐藏接口。 ## 一、准备工作 在开始配置自定义 android.jar 文件之前,需要确保以下环境准备就绪: 1. **克隆项目代码**:使用以下命

gitblog_00568的博客 996

Android Hidden API 项目常见问题解决方案

**Android Hidden API** 是一个开源项目,旨在提供对Android隐藏API和内部资源的访问。这些隐藏的API和资源通常被Google隐藏,以确保API的稳定性和避免在未来的API版本中出现不兼容的问题。该项目通过提供自定义的`android.jar`文件,使得开发者可以在自己的应用中使用这些隐藏的API和资源。 该项目的主要编程语言是Java,因为它主要涉及Android平...

gitblog_07868的博客 687

Android 7.0(API 24)以上调用系统安装包问题

Android 7.0之后对于文件访问安全性加强,一些旧的调用方法也发生了结果异常。 Android 7.0(API 24)以前可用的安装方法 public static boolean installApk(Context context, String apkPath) { File apkFile = new File(apkPath); if(!apkFile.exists() || !apkFile.isFile()) return false;

vivisoul的专栏 1472

kotlin安卓开发:layout文件分类

我在layout里面直接创建了很多二级文件夹,甚至还有三级文件夹。 不可以直接使用,因为R索引获取不到,我们要到构建文件里面,加点东西。 是app的构建:加一个SourceSets配置    一定注意:最下面是main/res   res/layout  上面的是我们自定义的文件夹,这样你会发现,还是不行,因为:这样才可以,看出区别了么 在我们的分类文件夹里面一定加一个layout...

707

详解Android插件化开发-资源访问

动态加载技术(也叫插件化技术),当项目越来越庞大的时候,我们通过插件化开发不仅可以减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。 通常我们把安卓资源文件制作成插件的形式,无外乎有一下几种: zip、jar、dex、APK(未安装APK、安装APK) 对于用户来讲未安装的APK才是用户所需要的,不安装、不重启,...

weixin_30830327的博客 69

Android SAF存储访问框架:从文件选择器到安全文件管理的完整指南

在Android开发中,文件访问权限管理是保障用户隐私和数据安全的核心机制。传统粗放的存储权限模式允许应用在获得授权后访问整个外部存储,这带来了严重的安全隐患。为了解决这一问题,Android引入了基于作用域的文件访问范式,通过内容提供者(ContentProvider)和URI权限机制实现精细化的文件控制。Storage Access Framework(SAF)正是这一理念的技术实现,它提供了一套标准化的框架,让应用能够以安全、用户驱动的方式访问设备文件和云存储。SAF的核心价值在于为分区存储(Scop

weixin_34112181的博客 323

android 膨胀动画,android – 如何从膨胀的布局访问视图?

我有一个简单的Activity附加了main.xml. main.xml有一个自定义布局(customLinearLayout)和一个简单的TextView.自定义布局还有自己的布局文件(linearlayout.xml)和一个简单的Button.布局由班级正确夸大.linearlayout.xml中的Button应该更改main.xml中textView的文本,但是我无法访问该textView....

weixin_33541245的博客 191
上一篇: java路径问题
下一篇: Android中startActivity中的permission检测与UID机制
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值