目录
4. 从网络请求获取数据 (使用 HttpURLConnection 或 OkHttp)
5. 从内容提供者 (Content Provider) 获取数据
10. 从广播 (Broadcast Receiver) 获取数据
在 Android 开发中,获取数据的方法有很多种,具体取决于数据的来源和类型。以下是一些常见的获取数据的方法:
1. 从 SharedPreferences
获取数据
SharedPreferences
是 Android 提供的一种轻量级存储机制,适合存储键值对数据,如用户设置、配置等。
SharedPreferences sharedPreferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
String value = sharedPreferences.getString("key", "默认值");
- 适用场景:小量数据存储,例如设置、用户偏好等。
2. 从数据库 (SQLite) 获取数据
Android 提供 SQLite 数据库用于存储结构化数据。
SQLiteDatabase db = openOrCreateDatabase("my_database", MODE_PRIVATE, null);
Cursor cursor = db.rawQuery("SELECT * FROM my_table", null);
if (cursor.moveToFirst()) {
do {
String data = cursor.getString(cursor.getColumnIndex("column_name"));
} while (cursor.moveToNext());
}
cursor.close();
db.close();
- 适用场景:需要存储和查询结构化数据时,如应用中的表格数据。
3. 从文件中读取数据
Android 允许应用在内部存储或外部存储中读写文件。
try {
FileInputStream fis = openFileInput("myfile.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
String fileContent = stringBuilder.toString();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
- 适用场景:需要处理大文本或文件数据时,如缓存文件、日志文件等。
4. 从网络请求获取数据 (使用 HttpURLConnection
或 OkHttp
)
网络请求是常见的数据获取方式,用于从服务器获取数据。可以使用原生的 HttpURLConnection
或第三方库如 OkHttp
。
// 使用 OkHttp 发起 GET 请求
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.example.com/data")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String responseData = response.body().string();
// 处理数据
}
}
});
- 适用场景:需要从远程服务器获取数据时,例如 REST API 请求。
5. 从内容提供者 (Content Provider) 获取数据
内容提供者(ContentProvider
)用于在应用间共享数据,或者访问系统级数据,如通讯录、媒体等。
Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
String contactName = cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
} while (cursor.moveToNext());
cursor.close();
}
- 适用场景:访问设备的联系人、媒体、日历等系统数据,或其他应用暴露的数据。
6. 从 Intent 获取数据
Intent
用于在组件之间传递数据,例如从一个活动传递到另一个活动。
Intent intent = getIntent();
String data = intent.getStringExtra("key");
- 适用场景:在活动或服务等 Android 组件之间传递数据。
7. 从 Bundle 获取数据
Bundle
是在 Android 中传递数据的常用类,通常用于在 Activity 或 Fragment 之间传递数据。
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("key");
}
- 适用场景:用于传递小量数据,例如在 Activity 或 Fragment 间通信时。
8. 从传感器获取数据
Android 提供了各种传感器,如加速度计、陀螺仪等。可以通过 SensorManager
获取传感器数据。
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
SensorEventListener sensorEventListener = 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) {}
};
sensorManager.registerListener(sensorEventListener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
- 适用场景:开发涉及传感器的应用,如健康追踪、运动类应用。
9. 从系统服务获取数据
Android 提供许多系统服务,例如位置服务(LocationManager
)、电池服务(BatteryManager
)等。
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
}
}
- 适用场景:获取系统层级的数据,如设备位置、电池状态等。
10. 从广播 (Broadcast Receiver) 获取数据
可以使用广播接收器来监听系统事件或应用内事件。
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
}
}
};
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, filter);
- 适用场景:监听系统广播事件,例如电量变化、网络连接状态变化等。
这些方法涵盖了 Android 开发中最常见的获取数据的途径,可以根据需求选择合适的方式获取数据。
标签:String,哪些,cursor,获取数据,new,Android,null From: https://blog.csdn.net/LLZjiayou/article/details/142637150