我有以下服务器网址:
server-base-url/method1
server-base-url/method2
server-base-url/method3
…
server-base-url/method100
我目前正在使用属性文件来存储URL.当我需要使用一些服务器URL时,我会阅读属性文件并使用Spring 4 Android执行http请求
我知道这应该是另一种方式(并且更好的方式)来做到这一点.实现这一目标的最佳做法是什么?
解决方法:
另一种选择是使用Plain Java:
public class ServerInfo {
private static final String URL_BASE_DEBUG = "your base debug url";
private static final String URL_BASE_RELEASE = "your base release url";
public static String getBaseUrl() {
//change if debug' release or whichever flavor
return URL_BASE_DEBUG;
}
}
它非常简单……您可以在单个Java类中获得所需的所有信息
现在关于网络通信它真的取决于你…有很多选择…我个人喜欢Retrofit 2这是一个网络库okhttp顶部的包装器
如何使用上述方法使用Retrofit的简短示例如下:
休息Api(如User Rest api)
public interface SomeRestApiEndPoints {
@GET("api/method1")
Call<ReturnValue> method1(params);
@POST(api/method2)
Call<ReturnObject> method2(params);
...
}
休息客户
public class RestClient {
private static RestClient sRestClient;
private Retrofit mRetrofit;
private SomeRestApiEndPoints apiEndpoint;
public static RestClient getRestClient () {
if(sRestClient != null){
return sRestClient;
}
synchronized (RestClient.class) {
if(sRestClient == null) {
//gson example
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
RestClient client = new RestClient();
client.mRetrofit = new Retrofit.Builder()
.baseUrl(ServerInfo.getBaseUrl()) //This is where you bind the base Url
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
client.apiEndpoint = client.mRetrofit.create(SomeRestApiEndPoints.class);
sRestClient = client;
}
return sRestClient;
}
public SomeRestApiEndPoints getApi() {
return apiEndpoints;
}
}
用法示例
Call<ReturnValue> call = RestClient.getRestClient().getApi().method1(params);