之前开发程序联测测接口的时候,因为要和不同的后台人员调接口,所以经常要先把程序里的ip地址改成后台人员给我的。每次都要先修改ip地址,之后编译运行一下,才能测试。但要是换了个后台人员,或者同时和2个后台人员测接口,又要再修改ip后重新编译,重新运行,很繁琐,包括后期测试也是一样。
测试人员总是问我能不能弄个功能,可以让他们在dat环境下测完一个功能后,可以在应用里手动切换网络地址,继续测uat网络环境下此功能是否正常,之前忙着别的事儿,而且对这个功能也没什么头绪,就一直没弄。最近时间闲下来了,而且关于这个功能,我也有了一些自己的见解,所以在此把这个功能展示一下,嘿嘿。
多余的话就不说了,直接上图~
核心原理:这个输入框里可以随时设置网络地址和端口号(如果不需要输入端口号,直接空着就行),设置的网址会在点击保存按钮后直接替换app里面通用的网络地址前缀,同时将数据存入SharedPreferences中,每次启动app时,都会从Application中先检查SharedPreferences中是否存在保存的数据,如果有存储的数据,就将通用url修改成存储的url,达到这次保存,下次就不用修改了的功能。


下面开始直接贴代码
1.MainActivity.java
public class MainActivity extends AppCompatActivity {
private TextView tv_url_ma, tv_changeurl_ma, tv_refresh_ma;
private WebView wv_showurl_ma;
private static final int INTERNETCODE = 001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();//代码初始化
tv_url_ma.setText(PublicInfo.appurl);
setClick();//设置点击方法
checkPermissions();//检查用户是否给予网络权限,如果没有,就不启用
initwv();//webview设置
}
/*8
检查用户是否给予网络权限
*/
private void checkPermissions() {
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {//用户没有进行网络授权
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.INTERNET}, INTERNETCODE);
return;
} else {
//已经获取到网络权限,可以显示默认网址中的数据
wv_showurl_ma.loadUrl(PublicInfo.appurl);//设置网络地址
}
}
/**
* 用户权限返回结果
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case INTERNETCODE://网络权限的返回值
//if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {//证明得到了用户授权
checkPermissions();//再次调用检查权限的方法,如果没问题,就会启动网络请求
} else {
Toast.makeText(MainActivity.this, "当前设备未获取网络权限,无法联网", Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
/**
* webView设置
*/
private void initwv() {
wv_showurl_ma.getSettings().setJavaScriptEnabled(true);//如果网页中使用js,不加这行代码不显示
wv_showurl_ma.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// return super.shouldOverrideUrlLoading(view, url);
view.loadUrl(url);
return true;//返回值为true时在WebView中打开,为false时调用浏览器打开
}
});
}
/**
* 设置点击方法
*/
private void setClick() {
tv_changeurl_ma.setOnClickListener(new MainActivityClicm());
tv_refresh_ma.setOnClickListener(new MainActivityClicm());
}
/**
* 代码初始化
*/
private void init() {
tv_url_ma = findViewById(R.id.tv_url_ma);//url地址展示
tv_changeurl_ma = findViewById(R.id.tv_chan