app实现动态切换测试环境和生产环境

原理很简单,就是将要切换的url存到本地,通过改变本地的url,每次开启网络请求的时候,从本地获取url,来达到动态切换环境的效果。
【app实现动态切换测试环境和生产环境】代码如下:

package www.doolii.cn.environmentdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button button1,button2,send; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SharedPerferenceUtils.saveString(MainActivity.this, "environment", "http://hgj.doolii.cn"); button1=(Button)findViewById(R.id.button1); button2=(Button)findViewById(R.id.button2); send=(Button)findViewById(R.id.send); button1.setOnClickListener(this); button2.setOnClickListener(this); send.setOnClickListener(this); }@Override public void onClick(View view) { switch(view.getId()){ case R.id.button1://生产环境 SharedPerferenceUtils.saveString(MainActivity.this,"environment","http://hgj.doolii.cn"); break; case R.id.button2: SharedPerferenceUtils.saveString(MainActivity.this,"environment","http://shuola.doolii.cn"); break; case R.id.send: send(); break; } }private void send() { String url=new Constant(MainActivity.this).MarketList; Log.i("url----",url); HttpUtils.doGetAsyn(url, new HttpUtils.CallBack() { @Override public void onRequestComplete(String result) { Log.i("result----",result); } }); } }

Constant :

public class Constant { //publicString url = "http://shuodealae.doolidei.cn"; // 测试域名 //publicString url = "http://wre.dooletii.cn"; // 生产域名 private Context context; public Constant(Context context){ this.context=context; } publicString url = SharedPerferenceUtils.getString(context,"environment"); publicString HGJ_TAG = "HGJ"; // 短信类型reg|reset_pwd|find_pwd|login publicString SMS_TYPE1 = "reg"; publicString SMS_TYPE2 = "reset_pwd"; publicString SMS_TYPE3 = "find_pwd"; publicString SMS_TYPE4 = "login"; //图片类型 // MALL("MALL","商场"),STORE("STORE","门店"),GOODS("GOODS","商品"),BRAND("BRAND","品牌"),BENEFIT("BENEFIT","优惠信息") // 图片使用位置 // FOCUS("FOCUS","焦点图"),LOGO("LOGO","logo"),PUBLICITY("PUBLICITY","宣传图"),BENEFIT_TOP("BENEFIT_TOP","优惠顶层图片"),SHOW("SHOW","展示:商场实景图.品牌秀.店铺实景.产品特写图等"),//分页加载 publicint Current_Page = 1; //当前页 publicint Page_Size = 20; //每页长度 //登录注册 publicfinal String Header =url + "/merchant/code"; //图形验证码ticket publicfinal String Login =url + "/merchant/join/login/pwd"; //登录-密码方式post publicfinal String Send_Sms =url + "/merchant/join/sms/send"; //发送验证码post publicfinal String Regist =url + "/merchant/join/reg"; //店员注册post }

HttpUtils:

import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; /** * Created by lzq on 2015/12/22. */ public class HttpUtils { private static final int TIMEOUT_IN_MILLIONS = 5000; public interface CallBack { void onRequestComplete(String result); }/** * 异步的Get请求 * * @param urlStr * @param callBack */ public static void doGetAsyn(final String urlStr, final CallBack callBack) { new Thread() { public void run() { try { String result = doGet(urlStr); if (callBack != null) { callBack.onRequestComplete(result); } } catch (Exception e) { e.printStackTrace(); }}; }.start(); }/** * 异步的Post请求 * @param urlStr * @param params * @param callBack * @throws Exception */ public static void doPostAsyn(final String urlStr, final String params, final CallBack callBack) throws Exception { new Thread() { public void run() { try { String result = doPost(urlStr, params); if (callBack != null) { callBack.onRequestComplete(result); } } catch (Exception e) { e.printStackTrace(); }}; }.start(); }/** * Get请求,获得返回数据 * * @param urlStr * @return * @throws Exception */ public static String doGet(String urlStr) { URL url = null; HttpURLConnection conn = null; InputStream is = null; ByteArrayOutputStream baos = null; try { url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(TIMEOUT_IN_MILLIONS); conn.setConnectTimeout(TIMEOUT_IN_MILLIONS); conn.setRequestMethod("GET"); conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); if (conn.getResponseCode() == 200) { is = conn.getInputStream(); baos = new ByteArrayOutputStream(); int len = -1; byte[] buf = new byte[128]; while ((len = is.read(buf)) != -1) { baos.write(buf, 0, len); } baos.flush(); return baos.toString(); } else { throw new RuntimeException(" responseCode is not 200 ... "); }} catch (Exception e) { e.printStackTrace(); } finally { try { if (is != null) is.close(); } catch (IOException e) { } try { if (baos != null) baos.close(); } catch (IOException e) { } conn.disconnect(); }return null ; }/** * 向指定 URL 发送POST方法的请求 * * @param url *发送请求的 URL * @param param *请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 * @throws Exception */ public static String doPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 HttpURLConnection conn = (HttpURLConnection) realUrl .openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("charset", "utf-8"); conn.setUseCaches(false); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); conn.setReadTimeout(TIMEOUT_IN_MILLIONS); conn.setConnectTimeout(TIMEOUT_IN_MILLIONS); if (param != null && !param.trim().equals("")) { // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); } // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } }








    推荐阅读