- 浏览: 505683 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (200)
- java基础 (30)
- ajax (19)
- 乱写 (5)
- groovy (2)
- db (8)
- gwt (0)
- jee (2)
- 我关注的开源 (1)
- RIA AIR (1)
- spring (11)
- lucene (0)
- 工具 (10)
- 百科 (2)
- linux (6)
- android (40)
- 移动开发 (21)
- 代码片断 (15)
- tomcat (1)
- css (1)
- html5 (2)
- jquery (2)
- playframework (3)
- web (2)
- nio (3)
- design (1)
- nosql (3)
- 日志 (12)
- mysql (4)
- 图表 (1)
- python (3)
- ruby (1)
- git (0)
- hibernate (1)
- springboot (1)
- guava (1)
- mybatis (0)
- 工作问题 (3)
- php (1)
最新评论
-
linzm1990:
踩了很多坑啊。。。。
hibernate @Nofound 与@ManyToOne fetch lazy的问题 -
Ccccrrrrrr:
...
转: Spring boot 文件上传 -
rmzdb:
兄弟,你这个东西,在ie内核的浏览器,貌似不识别 文件名
工作问题:http下载文件,中文文件名在firefox下乱码问题 -
107x:
问题解决了,谢谢!
工作问题:http下载文件,中文文件名在firefox下乱码问题 -
klxqljq:
额鹅鹅鹅
android布局实现头尾固定, 中间多余内容可以滚动
http://www.ibm.com/developerworks/cn/xml/x-androidstorage/
存储应用程序首选项
本节介绍 Preferences API 和屏幕。Android API 提供很多方式处理首选项。其中一种方式是直接使用 SharedPreferences,并使用您自己的屏幕设计和首选项管理。第二种方法是使用 PreferenceActivity。PreferenceActivity 自动负责首选项如何呈现在屏幕上(默认情况下,看起来跟系统首选项一样),并通过使用 SharedPreferences 在用户与每个首选项交互时自动存储或保存首选项。
Preferences 屏幕的 XML 声明
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/prefs_screen" android:key="preferencescreen" > <PreferenceCategory android:title="Assets"> <EditTextPreference android:key="@string/prefs_assetname_friendslist_key" android:title="Friends List" android:summary="Please enter filename" android:defaultValue="friends.txt" /> <EditTextPreference android:key="@string/prefs_assetname_picture_key" android:title="Picture" android:summary="Please enter filename" android:defaultValue="pict2.jpg" /> </PreferenceCategory> <PreferenceCategory android:title="Auto Settings"> <CheckBoxPreference android:key="@string/prefs_autodelete_key" android:title="Delete at Startup" android:summary="Check to clear at startup" android:defaultValue="false" /> </PreferenceCategory> </PreferenceScreen>
PreferenceScreen 包含 EditTextPreference 的两个实例、一个 CheckBoxPreference 和两个由 PreferenceCategory 定义的类别组(一个用于 Asset,另一个用于 Auto Settings)。
使用 SharedPreferences
///////////////////////////////////////////////////////////// // The following methods show how to use the SharedPreferences ///////////////////////////////////////////////////////////// /** * Retrieves the Auto delete preference * @return the value of auto delete */ public boolean prefsGetAutoDelete() { boolean v = false; SharedPreferences sprefs = PreferenceManager.getDefaultSharedPreferences(appContext); String key = appContext.getString(R.string.prefs_autodelete_key); try { v = sprefs.getBoolean(key, false); } catch (ClassCastException e) { } return v; } /** * Sets the auto delete preference * @param v the value to set */ public void prefsSetAutoDelete(boolean v) { SharedPreferences sprefs = PreferenceManager.getDefaultSharedPreferences(appContext); Editor e = sprefs.edit(); String key = appContext.getString(R.string.prefs_autodelete_key); e.putBoolean(key, v); e.commit(); }
MainActivity 插入到数据库中
String fname = prefsGetFilename(); if (fname != null && fname.length() > 0) { buffer = getAsset(fname); // Parse the JSON file String friendslist = new String(buffer); final JSONObject json = new JSONObject(friendslist); JSONArray d = json.getJSONArray("data"); int l = d.length(); for (int i2=0; i2<l; i2++) { JSONObject o = d.getJSONObject(i2); String n = o.getString("name"); String id = o.getString("id"); dbHelper.insert(id, n); } // Only the original owner thread can touch its views MainActivity.this.runOnUiThread(new Runnable() { public void run() { friendsArrayAdapter.notifyDataSetChanged(); } }); }
MainActivity Select All 和将数据绑定到 ListView
final ArrayList<Friend> dbFriends = dbHelper.listSelectAll(); if (dbFriends != null) { // Only the original owner thread can touch its views MainActivity.this.runOnUiThread(new Runnable() { public void run() { friendsArrayAdapter = new FriendsArrayAdapter( MainActivity.this, R.layout.rowlayout, dbFriends); listView.setAdapter(friendsArrayAdapter); friendsArrayAdapter.notifyDataSetChanged(); } }); }
从本地私有存储器读取数据
/** * Writes content to internal storage making the content private to * the application. The method can be easily changed to take the MODE * as argument and let the caller dictate the visibility: * MODE_PRIVATE, MODE_WORLD_WRITEABLE, MODE_WORLD_READABLE, etc. * * @param filename - the name of the file to create * @param content - the content to write */ public void writeInternalStoragePrivate( String filename, byte[] content) { try { //MODE_PRIVATE creates/replaces a file and makes // it private to your application. Other modes: // MODE_WORLD_WRITEABLE // MODE_WORLD_READABLE // MODE_APPEND FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE); fos.write(content); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
从内部私有存储器读取数据
/** * Reads a file from internal storage * @param filename the file to read from * @return the file content */ public byte[] readInternalStoragePrivate(String filename) { int len = 1024; byte[] buffer = new byte[len]; try { FileInputStream fis = openFileInput(filename); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int nrb = fis.read(buffer, 0, len); // read up to len bytes while (nrb != -1) { baos.write(buffer, 0, nrb); nrb = fis.read(buffer, 0, len); } buffer = baos.toByteArray(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return buffer; }
从本地私有存储器删除数据
/** * Delete internal private file * @param filename - the filename to delete */ public void deleteInternalStoragePrivate(String filename) { File file = getFileStreamPath(filename); if (file != null) { file.delete(); } }
为公共数据使用设备的外部存储器
有了数据存储 API,您可以使用外部存储器存储数据。信息可以是私有的,您可以有选择地让其他应用程序对之具有读或写的访问权限。本节您将对此 API 进行编程,以便使用包括 getExternalStorageState()、getExternalFilesDir()、getExternalStorageDirectory() 和 getExternalStoragePublicDirectory() 在内的很多 API 来存储公共数据。您为公共数据使用下面的路径:/Android/data/<package_name>/files/。
在使用外部存储器之前,必须看看它是否可用,是否可写。下面两个代码片段展示了测试这些条件的帮助器方法。清单 23 测试外部存储器是否可用。
测试外部存储器是否可用
/** * Helper Method to Test if external Storage is Available */ public boolean isExternalStorageAvailable() { boolean state = false; String extStorageState = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(extStorageState)) { state = true; } return state; }
测试外部存储器是否只可读
/** * Helper Method to Test if external Storage is read only */ public boolean isExternalStorageReadOnly() { boolean state = false; String extStorageState = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(extStorageState)) { state = true; } return state; }
写到外部内存
/** * Write to external public directory * @param filename - the filename to write to * @param content - the content to write */ public void writeToExternalStoragePublic(String filename, byte[] content) { // API Level 7 or lower, use getExternalStorageDirectory() // to open a File that represents the root of the external // storage, but writing to root is not recommended, and instead // application should write to application-specific directory, as shown below. String packageName = this.getPackageName(); String path = "/Android/data/" + packageName + "/files/"; if (isExternalStorageAvailable() && !isExternalStorageReadOnly()) { try { File file = new File(path, filename); file.mkdirs(); FileOutputStream fos = new FileOutputStream(file); fos.write(content); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
从外部内存读取数据
/** * Reads a file from internal storage * @param filename - the filename to read from * @return the file contents */ public byte[] readExternallStoragePublic(String filename) { int len = 1024; byte[] buffer = new byte[len]; String packageName = this.getPackageName(); String path = "/Android/data/" + packageName + "/files/"; if (!isExternalStorageReadOnly()) { try { File file = new File(path, filename); FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int nrb = fis.read(buffer, 0, len); //read up to len bytes while (nrb != -1) { baos.write(buffer, 0, nrb); nrb = fis.read(buffer, 0, len); } buffer = baos.toByteArray(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return buffer; }
外部内存删除文件
/** * Delete external public file * @param filename - the filename to write to */ void deleteExternalStoragePublicFile(String filename) { String packageName = this.getPackageName(); String path = "/Android/data/" + packageName + "/files/"+filename; File file = new File(path, filename); if (file != null) { file.delete(); } }
处理外部存储器需要特殊的权限 WRITE_EXTERNAL_STORAGE,它通过 AndroidManifest.xml 请求得到
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
外部存储 API 通过根据文件类型(比如 Pictures、Ringtones)将文件存储在预先确定的目录中,允许您公共地存储文件。本文没有介绍这种方法,但是您应该熟悉它。此外,记住外部存储器中的文件任何时候都可能消失。
如果您具有不需要长期永久保存的临时文件,那么可以将这些文件存储在高速缓存中。高速缓存是一种特殊的内存,可以用于存储中小型数据(少于兆字节),但是您一定要知道,取决于有多少内存可用,高速缓存的内容任何时候都可能被清除。
检索到内部内存高速缓存的路径
/** * Helper method to retrieve the absolute path to the application * specific internal cache directory on the file system. These files * will be ones that get deleted when the application is uninstalled or when * the device runs low on storage. There is no guarantee when these * files will be deleted. * * Note: This uses a Level 8+ API. * * @return the absolute path to the application specific cache * directory */ public String getInternalCacheDirectory() { String cacheDirPath = null; File cacheDir = getCacheDir(); if (cacheDir != null) { cacheDirPath = cacheDir.getPath(); } return cacheDirPath; }
检索到外部内存高速缓存的路径
/** * Helper method to retrieve the absolute path to the application * specific external cache directory on the file system. These files * will be ones that get deleted when the application is uninstalled or when * the device runs low on storage. There is no guarantee when these * files will be deleted. * * Note: This uses a Level 8+ API. * * @return the absolute path to the application specific cache * directory */ public String getExternalCacheDirectory() { String extCacheDirPath = null; File cacheDir = getExternalCacheDir(); if (cacheDir != null) { extCacheDirPath = cacheDir.getPath(); } return extCacheDirPath; }
发表评论
-
android listview
2012-07-13 17:37 927ListView与Button的共存问题解决, 解决在list ... -
演化理解 Android 异步加载图片
2011-11-09 09:55 902LinearLayout 布局,其下放了5个ImageView ... -
android常用颜色
2011-11-07 08:49 1279常用颜色值: 可以完美的颜色比对的网站: http://w ... -
dialog,activity 屏蔽Home键详解
2011-11-03 09:39 0http://www.iteye.com/topic/1116 ... -
android SlidingDrawer example
2011-11-03 09:35 0http://disanji.net/2010/12/16/a ... -
play flash swf file in android with webview
2011-11-03 09:34 0http://androidforums.com/applic ... -
AnimationDrawable 在Dialog中不能动画的原因(转)
2011-11-03 09:33 1302原来在dialog的onCreate onStart调用的时候 ... -
Free Android UI library & component roundup
2011-11-03 09:27 1146http://java.dzone.com/articles/ ... -
Android Fundamentals: Scheduling Recurring Tasks
2011-11-03 09:26 982http://mobile.tutsplus.com/tuto ... -
Android ListView pull up to refresh 改造(转)
2011-11-03 09:25 2097转自: http://dengyin2000.iteye.co ... -
Android中dp和px之间进行转换
2011-11-03 09:02 2260在xml布局文件中,我们既可以设置px,也可以设置dp(或者d ... -
view的setTag() 和 getTag()应用
2011-10-31 12:19 29933View中的setTag(Onbect)表示给View添加一个 ... -
使用getIdentifier()获取资源Id
2011-10-31 12:15 8457使用getIdentifier()获取资源Id int i ... -
ListView的长按菜单___源码分析
2011-10-24 09:28 2592ListView的长按菜单___源码分析 Android的l ... -
让你的Android程序兼容多种分辨率
2011-10-24 09:20 1024http://www.android123.com.cn/an ... -
andr菜单
2011-10-24 09:18 1208Android 菜单 菜单分为两种:系统菜单和上下文菜单。 ... -
Android 长按显示上下文菜单代码
2011-10-24 09:14 5938Android 长按显示上下文 ... -
Android Asynchronous Http Client
2011-10-19 10:27 2906转自: loopj.com/android-async-htt ... -
Android canvas.drawBitmap实现透明效果
2011-09-02 14:22 23434以下是针对,canvas.drawBitmap方法实施透明效 ... -
android资源别名
2011-08-30 14:24 2320详细请参考: http://developer.android ...
相关推荐
【Android Studio 中 SQLite 数据库操作】 在 Android 开发中,SQLite 是一个常用的数据存储解决方案,...通过学习和实践,学生能够更好地理解和运用这些数据存储技术,为开发高质量的 Android 应用打下坚实的基础。
Android提供了多种存储数据的机制,包括内部存储、外部存储、SQLite数据库以及SharedPreferences等。对于大量的结构化数据,通常推荐使用SQLite数据库,因为它提供了一种高效、结构化的数据存储方式。 在Android...
在数据存储方面,Android提供了多种选项,包括SQLite数据库、SharedPreferences、内部/外部存储以及ContentProvider。SQLite是轻量级的关系型数据库,适用于应用内的数据存储;SharedPreferences适合保存简单的键值...
通过阅读API文档,开发者可以了解如何创建活动(Activity)、广播接收器(Broadcast Receiver)、服务(Service)、内容提供者(Content Provider),以及如何处理视图(View)、布局(Layout)和数据存储等。...
本主题将深入探讨Android中的四种主要数据保存方法:内部文件存储、外部SD卡存储、首选项(SharedPreferences)存储以及SQLite数据库存储。 1. **内部文件存储** Android提供了一种方式来在应用的私有目录中保存...
例如,轻量级的用户设置适合首选项,小量的非结构化数据可以存于内部文件,媒体文件则应存储在外部存储,而结构化数据和需要高效查询的情况则推荐使用SQLite数据库。 在使用这些存储机制时,开发者需要注意数据同步...
Android提供了两种文件存储方式:内部存储和外部存储。内部存储的数据对用户不可见,且随着应用的卸载被删除;外部存储则允许用户访问,但需要处理文件权限问题。使用`openFileOutput()`和`openFileInput()`可以读写...
在“xamarin学习笔记A09(安卓数据简单存储)”中,你将深入学习如何在Xamarin.Android项目中实现这些数据存储方式,包括创建SQLite数据库、使用SharedPreferences、操作内部和外部文件,以及理解ContentProvider的...
SQLite是一个开源的、轻量级的、自包含的嵌入式SQL数据库引擎,适用于各种操作系统,包括Linux和Android等。它的优点在于不依赖外部数据库服务器,可以被直接集成到应用程序中,提供数据存储功能。 移植SQLite到...
1. **轻量级**: SQLite不需要独立的服务器进程,数据库文件可以直接存储在用户文件系统中,这使得它对内存和磁盘空间的需求非常低。 2. **自包含**: SQLite是完全自包含的,不依赖于任何外部库,只需要一个简单的...
对于开发者来说,理解SQLite的API接口和使用方法至关重要,这样才能有效地利用其功能来存储和管理应用程序的数据。 总的来说,SQLite 3.6.18是一个强大而可靠的数据库解决方案,尤其适合于需要离线数据存储、对数据...
在Android系统中,文件存储是应用管理数据的重要方式之一,涵盖了多种不同的存储机制,包括内部存储、外部存储、SQLite数据库、SharedPreferences以及ContentProvider等。这些方法各有特点,适用于不同的数据存储...
Android提供了多种存储方式,包括内部存储、外部存储(SD卡)以及共享首选项等。下面我们将深入探讨Android中的文件存储机制及其相关知识点。 1. **内部存储** - **内部存储** 是应用程序的私有存储空间,只能由该...
在数据存储方面,Android提供了多种方式,如SQLite数据库、SharedPreferences、内部/外部存储以及最近引入的Room库。对于记事本应用,SQLite数据库是最常用的选择,因为它能支持结构化的数据存储,便于管理和检索...
SQLite是一款开源、轻量级的嵌入式关系型数据库管理系统,广泛应用于各种操作系统,包括Linux、Windows和Android等。这个“sqlite-autoconf-3150200.tar.gz”文件是一个包含SQLite源代码的压缩包,版本号为3150200。...
**ApiDemos大全:深入理解Android控件与API实例** `ApiDemos`是Android SDK中的一个示例项目,它包含了大量的Android API演示,对于初学者来说是一个非常宝贵的资源。这个项目展示了Android平台上各种控件的用法...
3. **外部私有存储(External Private Storage)**:自Android 6.0(API级别23)起,应用可以使用`getExternalFilesDir()`获取外部私有目录,用于存储应用数据,只有应用本身可以访问。 4. **SQLite数据库**:...
9. **Android Jetpack DataStore**:作为Android Jetpack的一部分,DataStore是一种新的数据存储选项,它提供了与SharedPreferences类似的API,但使用Kotlin协程和序列化来实现异步、类型安全的数据存储。...
Android SDK文档详细介绍了如何从零开始编写一个Android应用,包括设置开发环境、理解组件模型、使用API接口、调试技巧以及发布应用的步骤。 综上所述,《Android SDK 中文开发文档》是Android开发者的重要参考资料...