Saving Data

http://www.cnblogs.com/gcg0036/p/4321278.html

Saving Key-Value Sets:

如果想保存一个相对较小的key-values集合,可以使用 SharedPreferences API. SharedPreferences对象指向包含key-value对的文件,并且提供简单的读写方式。每个SharedPreferences文件均由框架管理,私人或共享均可使用。

可以保存任何简单类型的数据:boolean、float、int、long 和 string 。 这些数据是持久保存的,可以跨越用户会话(即使应用程序被杀死了也没关系)。

您可以创建新的共享首选项文件,或者采取两种方式之一来调用现有文件。

  1. getSharedPreferences() 如果需要用到多个配置文件,就用这个方法,第一个参数指定了文件的名称。你可以从应用程序的任何 Context调用这一函数。

  2. getPreferences() 如果只需为 Activity 定义一个配置文件,就用本方法。。因为该文件对于 Activity 而言是唯一的,所以不需要命名。
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

读取,可以使用getInt() 、 getString()等调用方法来提供你想要的关键值,当键不存在时会返回某个默认值

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

写入,需要调用SharedPreferences上的edit()来创建SharedPreferences.Editor,然后调用commit()来保存

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

Saving Files

File 对象适用于在start-to-finish读取或写入大量数据,File对象适合于读取或者写入大量数据

内部存储:

  • 始终可用。

  • 保存的文件只能用于默认应用程序。
  • 当用户卸载应用程序时,系统会从内部存储删除应用程序所有文件。
当要确保无论用户还是其他应用程序均可访问文件时,内部存储无疑是最好的选择。

外部存储

  • 由于用户可以安装外部存储作为USB存储,并且在某些情况下可以从设备中移除,所以外部存储并不总是可用的。

  • 具有全局可读性,所以保存的文件可能被控制范围外的人读取。
  • 用户想要卸载应用程序,只有当 应用程序文件保存在getExternalFilesDir()目录时系统才会删除应用程序文件。
对于不需要访问限制的文件以及要同其他应用程序共享或者允许用户使用计算机访问的文件,外部存储无疑是最好的途径。

要写入外部存储,就必须在 manifest file中请求 WRITE_EXTERNAL_STORAGE的权限。

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

内部存储文件不需要任何权限。应用程序始终有权在其内部存储目录读取及写入文件。

注意: 自 Android 4.4 开始,如果只是读写应用程序私有的文件,则不再需要申请上述权限了。

在内部存储保存文件

getFilesDir() 返回表示应用程序内部目录的文件

getCacheDir() 返回表示应用程序临时缓存文件的内部目录的文件。一旦不再需要要确保删除每个文件。确保删除不再需要的文件并且设置合理大小的内存总量,比如1MB。如果系统存储开始运行缓慢,它可能会不经警告而删除缓存文件。

String filename = "myfile";
String string = "Hello world!";
FileOutputStream outputStream;

try {
  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
  outputStream.write(string.getBytes());
  outputStream.close();
} catch (Exception e) {
  e.printStackTrace();
}

如果需要缓存文件,就应该使用createTempFile()。例如从URL中提取文件名并且在应用程序内部缓存目录创建文件,方法如下:

public File getTempFile(Context context, String url) {
    File file;
    try {
        String fileName = Uri.parse(url).getLastPathSegment();
        file = File.createTempFile(fileName, null, context.getCacheDir());
    catch (IOException e) {
        // Error while creating file
    }
    return file;
}

在外部存储保存文件

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}
尽管外部存储可以由用户和其他应用程序进行修改,有两类文件可以在外部存储:
公共文件

其他应用程序和用户可以自由访问该文件。卸载应用程序时,用户仍然可以使用这些文件。例如从应用程序或者其他下载文件获得的照片。
私密文件

卸载应用程序时,属于该应用程序的私密文件应该删除。尽管从技术角度由于外部存储,用户和其他应用程序可以访问这些文件。用户卸载应用程序时,系统会删除应用程序外部私密目录中的所有文件。

例如应用程序或者临时媒体文件下载的其他资源。
public File getAlbumStorageDir(String albumName) {
    // Get the directory for the user‘s public pictures directory.
    File file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), albumName);
    if (!file.mkdirs()) {
        Log.e(LOG_TAG, "Directory not created");
    }
    return file;
}
public File getAlbumStorageDir(Context context, String albumName) {
    // Get the directory for the app‘s private pictures directory.
    File file = new File(context.getExternalFilesDir(
            Environment.DIRECTORY_PICTURES), albumName);
    if (!file.mkdirs()) {
        Log.e(LOG_TAG, "Directory not created");
    }
    return file;
}

使用API常量比如DIRECTORY_PICTURES提供的目录名称是很重要的。这些目录名称确保系统可以适当处理文件。例如保存在 DIRECTORY_RINGTONES的文件由系统媒体扫描来进行铃声分类而不是音乐分类.

getFreeSpace() 和 getTotalSpace()可以找出是否有足够的可用空间

删除文件可以是delete()。deleteFile()来请求Context定位和删除文件

注意:用户卸载应用程序时,安卓系统会删除以下内容:

  • 内部存储的所有文件。

  • 使用 getExternalFilesDir()外部存储的所有文件。
然而你要手动删除getCacheDir() 定期创建的所有缓存文件,同时定期删除其他不需要的文件。

Saving Data in SQL Databases:

http://wiki.eoeandroid.com/Saving_Data_in_SQL_Databases

时间: 2024-10-21 10:50:30

Saving Data的相关文章

[Android 开发教程(1)]-- Saving Data in SQL Databases

Saving data to a database is ideal for repeating or structured data, such as contact information. This class assumes that you are familiar with SQL databases in general and helps you get started with SQLite databases on Android. The APIs you'll need

Android Saving Data(二)

Saving File android读写文件的形式和普通的java IO的方式并没有什么不同,唯一有所限制的是当我们创建文件的时候不能够在像javaSE那样随意了.一般android读写文件有两种形式: 1 File file = new File(context.getFilesDir(), filename); 2 FileOutputStream outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 强烈推荐使用第一

Android Saving Data(一)

Saving Key-value Sets  保存键值对 SharedPreferences只能用来保存一些简单的数据,并且这些数据可以是共享的,也可以是私有的. SharedPreferences没有构造方法,只能同个Context中的getSharePreference获得. 获取共享首选项的句柄 您可以通过调用以下两种方法之一创建新的共享首选项文件或访问现有的文件: getSharedPreferences() - 如果您需要按照您用第一个参数指定的名称识别的多个共享首选项文件,请使用此方

Android关于保存数据(Saving data)

1.SharedPreferences(key-value) SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此保存的数据主要是简单类型的键值对(key-value),它保存的是一个XML文件. (1)创建sharedPreferences的两种方法:getSharedPreferences(String name, int mode)----如果你需要通过一个标识(name)来区分不同的sharedPreferences文件 getPreferences(int

iOS - 文件与数据(File &amp; Data)

01 推出系统前的时间处理 --- 实现监听和处理程序退出事件的功能 //视图已经加载过时调用 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //获得应用程序的单例对象,该对象的核心作用是提供了程序运行期间的控制和协作工作.每个程序在运行期间,必须有且仅有该对象的一个实例 UIApplication *app =

Devexpress VCL Build v2014 vol 14.2.5 发布

和xe8 几乎同一天出来,但是目前官方不支持xe8. The following sections list all minor and major changes in DevExpress VCL 14.2.5. Note that products, controls and libraries which aren't mentioned in the list below are included in the unified installer for compatibility,

windows live Writer test

package com.newegg.shopping.util.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletR

Is the onDestroy method of Activity certain to call?

The official doc about onDestroy method:   protected void onDestroy () Added in API level 1 Perform any final cleanup before an activity is destroyed. This can happen either because the activity is finishing (someone called finish() on it, or because

ExtJS笔记 Tree

The Tree Panel Component is one of the most versatile Components in Ext JS and is an excellent tool for displaying heirarchical data in an application. Tree Panel extends from the same class as Grid Panel, so all of the benefits of Grid Panels - feat