Android - 在开发和生产 Web 服务之间切换

2024-04-03

我想让我的应用程序在开发和生产 Web 服务之间切换,而不需要对代码进行太多更改(并且相对简单)。

现在我的网络服务地址为static final String类中的变量执行实际的 HTTP 调用,并使用 a 来切换应用程序其余部分中的代码static final boolean.

现在虽然boolean非常方便,我不能用它来更改网络服务地址,因为它们本身就是static final变量。解决这个问题的最佳实践是什么?

我发现一些关于 SO 的讨论直接针对使用提供的 Android SDKdebug变量,但虽然它可以取代boolean,它并没有解决其他问题。

注意:如果您想知道,我正在静态使用 Web 服务类,因此我没有可以在其中检查的构造函数debug变量和更改变量,另外我还希望它们是static final.


UPDATE

随着gradle构建系统现在变得更加容易。你可以放一个文件,比如说Server.java与开发服务器凭据src/debug/java以及拥有生产资格的人src/release/java(假设您使用默认的 gradle 项目配置,请根据自定义进行相应调整)。然后构建系统根据您的情况使用适当的文件buildType.

更好的是,我现在拥有release文件使用static final变量,而对于debug我使用的构建static在代码中以完全相同的方式使用的变量(例如Server.url, Server.username等),但可以从开发抽屉中更改。开发抽屉是什么?有关此示例,请参阅杰克·沃顿 (Jake Wharton) 的u2020 https://github.com/JakeWharton/u2020项目和相关谈话。


旧答案

我最终使用静态方法来访问另一个地址static final boolean定义调试状态。就像这样:

public static String getWSAddress() {
    if(DEVELOPMENT_MODE) {
        return "http://dev.server.com";
    }

    return "http://prod.server.com";
}

从我读到的内容来看,自从boolean is static final,编译器将进行优化,并且条件代码将因无法访问而被删除。

这似乎是解决此问题的合适解决方案,但 Android 文献指出,方法调用通常比直接变量访问更昂贵,因此无法确定这是否是比 Chuck 提供的解决方案更好的解决方案。

Edit:作为记录。我已经转向@Blundell 的解决方案。这太棒了。因此,如果您希望快速完成但将其纳入您的路线图,我建议您从这里开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 在开发和生产 Web 服务之间切换 的相关文章

  • 获取当前 android.intent.category.LAUNCHER 活动的实例

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 如何发布Android .aar源以使Android Studio自动找到它们?

    我正在将库发布到内部 Sonatype Nexus 存储库 Android Studio 有一个功能 可以自动查找通过 gradle 引用的库的正确源 我将 aar 的源代码作为单独的 jar 发布到 Nexus 但 Android Stu
  • 如何使用InputConnectionWrapper?

    我有一个EditText 现在我想获取用户对此所做的所有更改EditText并在手动将它们插入之前使用它们EditText 我不希望用户直接更改中的文本EditText 这只能由我的代码完成 例如通过使用replace or setText
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Android向menuItem添加子菜单,addSubMenu()在哪里?

    我想根据我的参数以编程方式将 OptionsMenu 内的子菜单添加到 menuItem 中 我检查了android sdk中的 MenuItem 没有addSubMenu 方法 尽管你可以找到 hasSubMenu 和 getSubMen
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 为什么要将对象的副本作为函数的参数?为什么 const ref 不是参数的默认方式?

    尽管我非常喜欢 C 编程 但有一件事我确实不明白 对我来说 最常见的函数编程方式似乎是这样的 some function a variable do something according to the data in the variab
  • Xcode 10、sourcery 和 swiftlint 构建阶段顺序

    更新到 Xcode 10 后 初始项目配置存在一些问题 步骤如下所示 使用生成一些文件Sourcery https github com krzysztofzablocki Sourcery 棉绒与SwiftLint https githu
  • 我的特殊字符在 WordPress 中显示为 ’

    如何让我的特殊字符在 WordPress 上正确显示 My are being converted to 8217 所有特殊字符都会发生这种情况 有什么功能或者插件可以修复吗 您可以使用htmlspecialchars decode htt
  • Visual Studio C# 语句崩溃

    当编辑很长的代码块时 无论如何肯定应该重构 但这超出了这个问题的范围 我经常渴望能够折叠语句块 就像折叠功能块一样 也就是说 如果减号图标出现在大括号内的所有内容的代码大纲上 那就太好了 它似乎出现在函数 类 区域 命名空间 使用中 但不适
  • 中包含子包的语法是什么?

    我正在使用Spring并且我有一个很长的子包列表 我是否必须在包中一一指定它们
  • Android上批量获取大量位图资源

    我有一长串图形 icon1 0 png icon1 1 png icon1 2 png icon12 0 png icon12 1 png icon12 2 png 我想将它们打包到我的android应用程序中 理想情况下 我认为我应该能够
  • 如何从 C++ DLL 中的 C# 简单函数调用

    我在 C 中有一个简单的函数 不是类的方法 declspec dllexport extern C void stdcall TestFunc 我尝试从 C 调用它 DllImport ImportTest dll public stati
  • 将语料库转换为R中的data.frame

    我正在使用 tm 包来应用词干提取 并且需要将结果数据转换为数据框 可以在这里找到解决方案R tm包vcorpus 将语料库转换为数据帧时出错 https stackoverflow com questions 24703920 r tm
  • 检查数组中是否存在元素

    PHP中有一个函数叫做isset http php net isset检查某些内容 例如数组索引 是否存在并且具有值 Python 怎么样 我需要在数组上使用它 因为有时我会收到 IndexError 列表索引超出范围 我想我could使用
  • 删除“搜索”选项,但保留“搜索列”选项

    我想从我的应用程序中删除 全局搜索 选项 但保留 列搜索 选项 有任何想法吗 我尝试过不同的参数 例如searching FALSE filtering none 这些都不能正常工作 My code server R library shi
  • MVC中VIEWDATA和VIEWBAG存储在哪里?

    我对 MVC 非常陌生 在 ASP Net 中 存在状态管理技术 其中视图状态或 cookie 存储在客户端中 会话存储在服务器中 类似地 我们在 MVC 中有 Viewbag ViewData 和 TempData cookie 和会话也
  • iOS setValue withCompletionBlock 未调用

    在设置值时 我遇到了一些在 iOS 模拟器和设备 上未调用的completionBlocks 例如 void addShortUserPlaylistUrl NSString playlistId playlistName NSString
  • Plotly.py:在行之间填充,正/负不同颜色

    使用 Plotly 我可以轻松绘制两条线并填充它们之间的区域 import plotly graph objects as go fig go Figure fig add trace go Scatter x 1 2 3 4 y 1 2
  • 如何将 Git 子模块指针恢复到存储在包含存储库中的提交?

    我的主 git 存储库中有一个 git 子模块 据我了解 主存储库存储一个 SHA 值 某处 指向它 链接到 的子模块的特定提交 我进入我的子模块并输入git checkout some other branch 我不知道我来自哪个提交 我
  • 使用 Python 更新媒体 wiki 文章?

    你好 我有一个 cron 作业 它收集有关服务的一些统计信息 我需要 cron 作业以编程方式更新媒体 wiki 页面 附加到页面 我在 cron 中使用 python 那么我最好的选择是什么 是否有 mediawiki python 库的
  • 数据绑定后如何隐藏gridview列?

    我使用以下链接中的解决方案隐藏我的列 如何隐藏 GridView 中的 TemplateField 列 https stackoverflow com questions 4954871 how to hide a templatefiel
  • 消除重复的 try/catch 代码

    编写必须一次又一次处理相同异常的代码总是很无聊 有没有一种方法可以在不使用try catch的情况下编写代码 并向方法添加属性来捕获 并处理 可能发生的各种异常 这听起来像 AOP Postsharp 这会是理想的解决方案吗 因此 我想编写
  • 如何在protobuf消息中添加int数组

    我必须编写一个 protobuf 消息 它应该有 1 个整数变量和一个整数数组 package protobuf message myProto optional uint32 message id 1 optional int updat
  • 无法读取 Angular 4 中 null 的属性“outlets”

    我有 Angular 4 3 6 项目 其中模板片段产生此错误 模板块 a article title a 错误堆栈跟踪 ArticleSpComponent html 26 ERROR TypeError Cannot read prop
  • Android - 在开发和生产 Web 服务之间切换

    我想让我的应用程序在开发和生产 Web 服务之间切换 而不需要对代码进行太多更改 并且相对简单 现在我的网络服务地址为static final String类中的变量执行实际的 HTTP 调用 并使用 a 来切换应用程序其余部分中的代码st