You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java中如何在多个类间共享应用配置参数?

Android配置参数跨类便捷使用的解决方案

方案一:单例模式封装配置类

把配置参数封装到单例类中,只需读取一次就能全局复用,是最常用的实现方式。

代码实现

public class AppConfig {
    // 单例实例,volatile保证多线程可见性
    private static volatile AppConfig instance;
    // 存储配置参数
    private String dbUrl;
    private String dbUsername;
    private String dbPassword;

    // 私有构造,禁止外部直接实例化
    private AppConfig() {}

    // 获取单例的方法
    public static AppConfig getInstance() {
        if (instance == null) {
            synchronized (AppConfig.class) {
                if (instance == null) {
                    instance = new AppConfig();
                }
            }
        }
        return instance;
    }

    // 读取配置文件并初始化参数
    public void loadConfig() {
        try (FileInputStream fis = new FileInputStream("/storage/emulated/0/Download/suivicourse.cfg")) {
            Properties prop = new Properties();
            prop.load(fis);
            this.dbUrl = prop.getProperty("database.url");
            this.dbUsername = prop.getProperty("database.username");
            this.dbPassword = prop.getProperty("database.password");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 提供getter方法供外部获取参数
    public String getDbUrl() {
        return dbUrl;
    }

    public String getDbUsername() {
        return dbUsername;
    }

    public String getDbPassword() {
        return dbPassword;
    }
}

使用方式

  • 在Activity初始化时加载配置:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    bind = ActivityHomeBinding.inflate(getLayoutInflater());
    setContentView(bind.getRoot());
    // 加载配置,全局生效
    AppConfig.getInstance().loadConfig();
    initView();
}
  • 在任意其他类中直接调用:
// 比如数据库操作类里
String dbUrl = AppConfig.getInstance().getDbUrl();
String dbUser = AppConfig.getInstance().getDbUsername();
String dbPwd = AppConfig.getInstance().getDbPassword();

方案二:利用Application类存储全局参数

Android的Application类是全局上下文,APP启动时会初始化一次,适合存放全局配置参数。

代码实现

public class MyApp extends Application {
    private String dbUrl;
    private String dbUsername;
    private String dbPassword;

    @Override
    public void onCreate() {
        super.onCreate();
        // 启动时自动加载配置
        loadConfig();
    }

    private void loadConfig() {
        try (FileInputStream fis = new FileInputStream("/storage/emulated/0/Download/suivicourse.cfg")) {
            Properties prop = new Properties();
            prop.load(fis);
            this.dbUrl = prop.getProperty("database.url");
            this.dbUsername = prop.getProperty("database.username");
            this.dbPassword = prop.getProperty("database.password");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // getter方法
    public String getDbUrl() {
        return dbUrl;
    }

    public String getDbUsername() {
        return dbUsername;
    }

    public String getDbPassword() {
        return dbPassword;
    }
}

配置Application

需要在AndroidManifest.xml中指定自定义的Application类:

<application
    android:name=".MyApp"
    <!-- 其他原有配置 -->
    >
</application>

使用方式

在任意类中通过上下文获取参数:

MyApp myApp = (MyApp) getApplicationContext();
String dbUrl = myApp.getDbUrl();

注意事项

  • 存储权限:直接使用外部存储的绝对路径,Android 6.0及以上版本需要动态申请READ_EXTERNAL_STORAGE权限,否则会抛出IO异常。
  • 配置更新:上述方案都是只读取一次配置,如果需要支持配置文件修改后重新加载,可以给配置类添加reloadConfig()方法重新读取文件。
  • 安全性:数据库密码直接存在外部明文文件有泄露风险,建议对敏感配置进行加密存储,或者改用SharedPreferences(同样需要加密处理)。

内容的提问来源于stack exchange,提问作者Pierre Tremblay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:22:35