适用场景:存储少量简单配置信息(如用户设置、登录状态)
使用步骤:
// 获取编辑器 SharedPreferences prefs = context.getSharedPreferences("app_settings", MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); // 保存数据 editor.putString("username", "JohnDoe"); editor.apply(); // 异步提交 // 读取数据 String username = prefs.getString("username", "default_value");
适用场景:需要持久化存储复杂关系型数据
核心组件:
SQLiteOpenHelper
:数据库创建与升级ContentValues
:数据插入Cursor
:结果集查询示例代码:
// 创建数据库帮助类 public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) { super(context, "app_db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)"); } // ...其他方法 }
存储类型 | 路径示例 | 适用场景 |
---|---|---|
内部存储 | /data/data/包名/files/ |
私密文件存储 |
外部存储 | /sdcard/Android/data/包名/ |
媒体文件共享 |
// 写入内部存储 File file = new File(context.getFilesDir(), "config.txt"); try (FileOutputStream fos = new FileOutputStream(file)) { fos.write("key=value".getBytes()); }
核心配置:
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); // 定义接口 public interface ApiService { @GET("users/{id}") Call<User> getUser(@Path("id") int id); } // 发起请求 ApiService api = retrofit.create(ApiService.class); api.getUser(123).enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) { /.../ } @Override public void onFailure(Call<User> call, Throwable t) { /.../ } });
RequestQueue queue = Volley.newRequestQueue(context); StringRequest stringRequest = new StringRequest( Request.Method.GET, "https://api.example.com/data", response -> tv.setText(response), // 成功回调 error -> Log.e("Volley", error.toString()) // 失败回调 ); queue.add(stringRequest);
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url("wss://echo.websocket.org").build(); WebSocket ws = client.newWebSocket(request, new WebSocketListener() { @Override public void onMessage(WebSocket webSocket, String text) { Log.d("WS", "Received: " + text); } // ...其他回调 });
Uri uri = ContactsContract.Contacts.CONTENT_URI; Cursor cursor = contentResolver.query(uri, null, null, null, null); if (cursor != null && cursor.moveToFirst()) { int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); String name = cursor.getString(nameIndex); cursor.close(); }
常见传感器类型:
监听示例:
SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE); Sensor accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sm.registerListener(new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; // 处理三维加速度数据 } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) {} }, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
数据类型 | 本地存储 | 网络获取 | 实时性要求 | 典型场景 |
---|---|---|---|---|
配置信息 | SharedPreferences | 低 | 用户设置 | |
媒体文件 | 外部存储 | 多图上传API | 中 | 图片分享 |
实时数据 | WebSocket | 高 | 聊天消息 | |
结构化数据 | SQLite | REST API | 中 | 用户信息 |
Q1:如何根据业务需求选择数据源?
Q2:如何处理网络请求的线程问题?
enqueue
回调主线程viewModelScope.launch { ... }