首页 > 其他分享 >在Android开发中获取数据的方法有哪些?

在Android开发中获取数据的方法有哪些?

时间:2024-09-29 18:48:20浏览次数:8  
标签:String 哪些 cursor 获取数据 new Android null

目录

1. 从 SharedPreferences 获取数据

2. 从数据库 (SQLite) 获取数据

3. 从文件中读取数据

4. 从网络请求获取数据 (使用 HttpURLConnection 或 OkHttp)

5. 从内容提供者 (Content Provider) 获取数据

6. 从 Intent 获取数据

7. 从 Bundle 获取数据

8. 从传感器获取数据

9. 从系统服务获取数据

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. 从网络请求获取数据 (使用 HttpURLConnectionOkHttp)

网络请求是常见的数据获取方式,用于从服务器获取数据。可以使用原生的 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

相关文章

  • Android12.0需求开发篇之Native Binder Demo通信篇章二
    1.需求描述        基于篇章一的基础上,增加NativeBinderDemo通信的回调功能,由于之前信息数据传递是个单向链路,即由client端主动发起,发送到Server服务端,缺失服务端调用客户端的逻辑,而在实际场景中,应用组还需要双向通信。基于此,在之前BspServer服务端的基础上增加回......
  • 数字人直播屡次违规真相曝光!有哪些技术可以有效解决?
    随着数字人直播的应用频率不断升高,其所蕴含着的市场需求和收益潜力日渐显现,让其用户规模得以持续扩大的同时,也让不少创业者都有了找数字人源码厂商搭建数字人直播系统的计划。在此背景下,与数字人直播违规吗相关的各类话题和答案的真实性也开始受到越来越多的关注。毕竟,无论是......
  • 第2天:熟悉Android Studio补充材料——`activity_main.xml`解读
    下面是对“第2天:熟悉AndroidStudio”该文学习的更深层次的补充材料,对activity_main.xml文件的理解。下面对activity_main.xml文件中每一行进行详细解释:<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="ht......
  • 第2天:熟悉Android Studio
    欢迎来到第2天的Android编程教程!今天,我们将深入了解AndroidStudio的界面,学习如何创建你的第一个“KotlinHelloWorld”项目,了解项目结构,并在模拟器或真机上运行你的应用程序。本教程代码下载地址HelloWorldApp学习目标通过今天的学习,你将能够:熟悉AndroidStudio的主......
  • 基于Java&MYSQL&Android的商品比价软件设计与实现20516-计算机毕设定制原创选题推荐(附
                                                 目 录摘要1绪论1.1开发背景1.2研究现状1.3论文结构与章节安排2 商品比价软件APP系统分析2.1可行性分析2.2......
  • Android实践:20个非常实用的正则表达式
            正则表达式是一种强大的文本处理工具,它们被广泛应用于数据验证、搜索、替换等多种场景。以下是20个非常实用的正则表达式,涵盖了密码验证、邮箱检查、日期和金额校验等多个方面。1.校验密码强度        密码的强度必须是包含大小写字母和数字的组合,......
  • Java实现随机抽奖的方法有哪些
    在Java中实现随机抽奖的方法,通常我们会使用java.util.Random类来生成随机数,然后基于这些随机数来选择中奖者。以下将给出几种常见的随机抽奖实现方式,包括从数组中抽取、从列表中抽取以及基于权重的抽奖方式。1.从数组中抽取importjava.util.Random;publicclassLottery......
  • Android页面跳转与返回机制详解
    在Android开发中,页面跳转是实现应用功能交互的重要手段之一。本文将从Activity之间的跳转、Activity与Fragment之间的跳转、Fragment之间的跳转以及页面返回的问题四个方面进行详细解析。一、Activity之间的跳转Activity是Android应用的基本构建块,代表了一个用户界面的单一屏幕......
  • Android性能优化:getResources()与Binder交火导致的界面卡顿优化
    背景某轮测试发现,我们的设备运行一个第三方的App时,卡顿感非常明显:界面加载很慢,菊花转半天滑屏极度不跟手,目测观感帧率低于15对比机(竞品)也会稍微一点卡,但是好很多,基本不会有很大感觉的卡顿可以初步判定我们的设备存在性能问题,亟需优化,拉平到竞品水准。最后发现,这个问题实际......
  • 聊一聊软件测试的基本原则有哪些
    目录原则1:测试用例中一个必需部分是对预期输出或结果的定义。原则2:程序员应当避免测试自己编写的程序。原则3:编写软件的组织不应当测试自己编写的软件。原则4:应当彻底检查每个测试的执行结果。原则5:测试用例的编写不仅应当根据有效和预期的输入情况,而且也应当根据无效和未......