首页 热点专区 小学知识 中学知识 出国留学 考研考公
您的当前位置:首页正文

Get小技能,Android动态切换服务器地址,再也不再烦打测试

2024-12-08 来源:要发发知识网
  • 起源

  1. 项目中一般我们常常会在代码中写死 服务器地址,而你每次可能配合不同的后台人员使用不同的本地服务器192.168.1.xx 地址与其进行调试接口等。

  2. 烦的是每次面对不同的后台都要在代码中修改地址进行调试,这倒没什么~次数多了而且在某种情况下需要经常切换地址的时候,将会是非常浪费时间的。

某日你去后台那边拿着手机演示着:“这里有问题!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存取用户数据
  • 地址

显示全文