-
起源
项目中一般我们常常会在代码中写死 服务器地址,而你每次可能配合不同的后台人员使用不同的本地服务器192.168.1.xx 地址与其进行调试接口等。
烦的是每次面对不同的后台都要在代码中修改地址进行调试,这倒没什么~次数多了而且在某种情况下需要经常切换地址的时候,将会是非常浪费时间的。
某日你去后台那边拿着手机演示着:“这里有问题!XXX 怎么不行了?”
后台说:“你这是线上的?切换我本地看下?”
我TM又要跑回去座位重新编译切换地址跑一遍代码,那不很操蛋的事情么?
我经历过一次,因为打包环境的问题 ,给到测试那边,测试 OK 之后没什么问题之后,就给后台丢了个新包放至正式版服务器~
第二天上班时候专门测试了下载,OK没毛病! (当时手机连着内网WIFI没问题)
发布之后大概上午十点的样子 收到用户反馈说 网络不给力?一直无法使用,卧草TM ,瞬间心里冒冷汗 ,所有更新后新版本的用户都无法正常使用 (当然无法使用我本地的测试环境包),
这次用户量还不是很多,不过这是非常非常致命的~只能卸载重装,用户直接删了,要么重装 这差点给老板从这个项目撤下来。
好了废话太多···
-
方法
很简单是将地址存储至SP(SharePreferences),从本地SP文件中去读取多个地址显示在列表中选择,测试过从SP中获取的速度,没有什么耗时,可行的!目前项目在使用妥妥的, 还可手动添加地址并且记录过已经添加过的地址。
-
主要代码逻辑
这里做法是根据 版本号 versionCode 为单数就可设置切换地址的弹窗,逢双数就为线上版本不可切换,
只需要记得每次打包出去的版本号为双数,就不能手动切换地址啦~
(当然这个限制可以你自己设置,大厂的东西都是逢双是吉,正式版本 哈哈~~)
findViewById(R.id.vServer).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//如果不是开放版的就显示
if (!App.getInstance().isReleaseVersion()) {
new ServerSelectDialog(MainActivity.this).show();
}
}
});
双数为默认取线上,单数则取本地测试服务器
/**
* 双数为默认取线上,单数则取本地测试服务器
*/
public class App extends Application {
private boolean isReleaseVersion;
....
@Override
public void onCreate() {
super.onCreate();
instance = this;
//根据版本号取余数
isReleaseVersion = (VersionUtils.getVersionCode(this) % 2 == 0);
...
}
...
public boolean isReleaseVersion() {
return isReleaseVersion;
}
}
来看下ServerSelectDialog,这里继承了BaseServerDialog你只需要这样使用即可
public class ServerSelectDialog extends BaseServerDialog {
public ServerSelectDialog(Activity context) {
super(context);
}
/**
* @param selectedUrl 将地址设置到本地SP文件中
*/
@Override
protected void setServerUrl(String selectedUrl) {
//这个SP中一般存储的是公共的参数包含服务器地址
SP.getPublic().put(SP.server, selectedUrl);
}
@Override
protected String getServerUrl() {
return URL.getSERVER();
}
@Override
protected List<String> defaultServerUrlList() {
List<String> serverList = new ArrayList<>();
serverList.add(URL.SERVER);
serverList.add(URL.SERVER_BACKUP);
serverList.add(URL.SERVER_BACKUP2);
return serverList;
}
}
具体你只要拿 BaseServerDialog 代码一百来行 拿下来使用就好了。
内部还简单对SharePreferences进行了封装 名称为 ShareStorage,更简便的使用SP存取用户数据
-
地址
详细的还请移步至 GitHub 查阅使用 。
学会分享ing,慢慢来,比较快!