Android在不使用数据库的情况下存储数据的方法
SharedPreferences是一种轻量级的键值对存储方式,适合存储一些简单的配置信息或少量的数据,它提供了一个简单的API来存储和检索原始数据类型(如字符串、整数、布尔值等)。
示例代码
// 获取SharedPreferences实例 SharedPreferences sharedPref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); // 保存数据 editor.putString("username", "JohnDoe"); editor.putInt("age", 30); editor.putBoolean("isLoggedIn", true); editor.apply(); // 或者使用 editor.commit(); // 读取数据 String username = sharedPref.getString("username", "DefaultUsername"); int age = sharedPref.getInt("age", 0); boolean isLoggedIn = sharedPref.getBoolean("isLoggedIn", false);
单元表格:SharedPreferences操作对比
操作 | 方法调用 | 参数 | 备注 |
保存字符串 | putString(key, value) | “username”, “JohnDoe” | key为用户名,value为字符串值 |
保存整型 | putInt(key, value) | “age”, 30 | key为年龄,value为整数值 |
保存布尔型 | putBoolean(key, value) | “isLoggedIn”, true | key为登录状态,value为布尔值 |
读取字符串 | getString(key, defValue) | “username”, “DefaultUsername” | key为用户名,defValue为默认值 |
读取整型 | getInt(key, defValue) | “age”, 0 | key为年龄,defValue为默认值 |
读取布尔型 | getBoolean(key, defValue) | “isLoggedIn”, false | key为登录状态,defValue为默认值 |
2. 文件存储
Android允许应用程序在其私有目录中创建、读取和写入文件,这对于存储大量数据或需要频繁读写的数据非常有用。
示例代码
// 写入文件 try { FileOutputStream fos = openFileOutput("myfile.txt", Context.MODE_PRIVATE); fos.write(content.getBytes()); fos.close(); } catch (IOException e) { e.printStackTrace(); } // 读取文件 try { FileInputStream fis = openFileInput("myfile.txt"); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } br.close(); String content = sb.toString(); } catch (IOException e) { e.printStackTrace(); }
单元表格:文件操作对比
操作 | 方法调用 | 参数 | 备注 |
写入文件 | openFileOutput(name, mode) | “myfile.txt”, Context.MODE_PRIVATE | 打开文件输出流,以私有模式写入 |
读取文件 | openFileInput(name) | “myfile.txt” | 打开文件输入流,以私有模式读取 |
3. 内部存储器(Internal Storage)
内部存储器是Android提供的一种私有存储空间,每个应用程序都有自己的内部存储空间,用于存储应用程序的私有数据。
示例代码
// 写入内部存储器 try { FileOutputStream fos = openFileOutput("mydata", Context.MODE_PRIVATE); fos.write(data.getBytes()); fos.close(); } catch (IOException e) { e.printStackTrace(); } // 读取内部存储器 try { FileInputStream fis = openFileInput("mydata"); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } br.close(); String data = sb.toString(); } catch (IOException e) { e.printStackTrace(); }
单元表格:内部存储器操作对比
操作 | 方法调用 | 参数 | 备注 |
写入内部存储器 | openFileOutput(name, mode) | “mydata”, Context.MODE_PRIVATE | 打开文件输出流,以私有模式写入 |
读取内部存储器 | openFileInput(name) | “mydata” | 打开文件输入流,以私有模式读取 |
4. 外部存储器(External Storage)
外部存储器通常指的是设备的SD卡或其他可移除存储设备,Android提供了访问外部存储器的API,但需要注意权限问题。
示例代码
// 检查权限并请求权限(如果需要在运行时请求) if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE); } else { // 写入外部存储器 File file = new File(Environment.getExternalStorageDirectory(), "myfile.txt"); try { FileOutputStream fos = new FileOutputStream(file); fos.write(content.getBytes()); fos.close(); } catch (IOException e) { e.printStackTrace(); } }
单元表格:外部存储器操作对比
操作 | 方法调用 | 参数 | 备注 |
检查权限 | ContextCompat.checkSelfPermission() | thisActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE | 检查是否已授予写权限 |
请求权限 | ActivityCompat.requestPermissions() | thisActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE | 请求写权限 |
写入外部存储器 | new FileOutputStream(new File(Environment.getExternalStorageDirectory(), “myfile.txt”)) | 打开文件输出流,写入数据到SD卡上的文件 |
5. ContentProvider
ContentProvider是一个标准的Android组件,用于在不同应用程序之间共享数据,通过实现ContentProvider,可以将应用程序的数据暴露给其他应用程序使用。
示例代码
public class MyContentProvider extends ContentProvider { private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); private static final int ITEMS = 1; private static final int ITEM_ID = 2; static { uriMatcher.addURI("com.example.myapp", "items", ITEMS); uriMatcher.addURI("com.example.myapp", "items/#", ITEM_ID); } @Override public boolean onCreate() { // 初始化数据源等操作... return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // 根据uri匹配查询数据... return null; // 返回查询结果的Cursor对象 } @Override public String getType(Uri uri) { // 根据uri返回MIME类型... return null; // vnd.android.cursor.dir/vnd.example.myapp.items } // ...其他方法如insert, update, delete等也需要实现... }
单元表格:ContentProvider方法对比
方法名称 | 功能描述 | 参数说明 | 返回值类型 |
onCreate | 初始化ContentProvider时调用 | boolean | |
query | 根据Uri查询数据 | Uri, projection, selection, selectionArgs, sortOrder | Cursor |
getType | 根据Uri返回MIME类型 | Uri | String |
insert | 插入新数据 | ContentValues, values, Uri uri | Uri (新数据的Uri) |
update | 更新现有数据 | ContentValues values, uri, selection, selectionArgs | int (受影响的行数) |
delete | 删除数据 | uri, selection, selectionArgs | int (受影响的行数) |
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1269037.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复