我有以下服务器网址:
服务器碱基URL /方法1
服务器碱基URL /方法2
服务器碱基URL /方法3
... ... 服务器碱基URL / method100
我目前正在使用属性文件来存储网址。当我需要使用一些服务器URL时,我会阅读属性文件并使用Spring 4 Android执行http请求
我知道这应该是另一种方式(并且更好的方式)来做到这一点。实现这一目标的最佳做法是什么?
答案 0 :(得分:3)
我肯定会将值下的android资源作为字符串。所以你给它命名一次并从Android工作室获得功能强大的工具,通过Locale,buildtype和flavors进行定制和本地化......我只是建议在分隔文件中设置url。即urls.xml
<resources>
<string name="url_server1">http://apipas.com/gloabl/server1</string>
<string name="url_server2">http://apipas.com/global/server2</string>
</resources>
对于简单的项目,它可能无关紧要..但是当您处理企业,或多个目标,多语言,不同的服务器层(基于位置;欧盟/亚洲......,或使用时:免费/付费,或阶段:开发/测试/生产)选择管理资源的方式至关重要。
让我详细说明......让我们说这个build.gradle for app:
buildTypes {
debug {
debuggable false
applicationIdSuffix 'debug'
}
qa {
debuggable false
applicationIdSuffix 'qa'
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
paid {
applicationId = "com.apipas.android.wellmanagerurlsapp.paid"
}
free {
applicationId = "com.apipas.android.wellmanagerurlsapp.free"
}
}
此外,它支持 de 作为德语和澳大利亚语言环境
所以我们有这些自定义因素:
您需要做的就是在正确的位置覆盖资源,以实现您需要实现的目标
假设我要使用buildType base来自定义URL:
或者你使用Flavors:
在使用flavor和buildType一起定制res时,请注意不要重复。
在开发过程中,您不需要更改URL的名称..当您拥有大型项目时,这真的是一个好点。您仍然可以轻松地为任何flavor / buildType / locale
更改内容您还可以使用所引用的JSON,XML或属性。但他们都不会给你什么res。
祝你好运,'。答案 1 :(得分:1)
另一种选择是使用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 Class
现在关于网络通信它真的取决于你...有很多选择......我个人喜欢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);
...
}
Rest客户端
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);
答案 2 :(得分:1)
我用来做的是根据buildType在<tbody>
<tr ng-repeat="u in usrs.usersList track by u.id">
<td class="td-name">{{ u.firstname }} {{ u.lastname }}</td>
<td class="sort-email">{{ u.username }}</td>
<td class="sort-login">{{ u.session.formatted_date }}</td>
<td class="sort-role">{{ u.role_id }}</td>
<td><button class="btn-green-sm">Remove</button></td>
</tr>
<tr>
<td>{{usrs.usersList}}</td>
</tr>
</tbody>
文件中创建URL参数。这是伟大的iosched项目遵循的策略。
要做的第一件事是在您的build.gradle
文件中添加您的行:
gradle.propeties
之后在# Website hostname
dev_website_host_name = devUrl.com
production_website_host_name = productionUrl.com
文件中,例如:
build.gradle
Grade将创建名为buildTypes {
debug {
debuggable true
minifyEnabled false
signingConfig signingConfigs.debug
resValue("string", "website_host_name", "${dev_website_host_name}")
}
release {
debuggable false
minifyEnabled true
// No signing config as we do this separately.
proguardFiles getDefaultProguardFile('proguard-android.txt'), file('proguard-project.txt')
resValue("string", "website_host_name", "${production_website_host_name}")
}
}
的字符串资源,并且根据您的构建类型将具有一个值或另一个值。要通过代码访问该值,只需键入website_host_name
即可!
这是我处理不同环境的不同构建类型的方法。谷歌的项目始终是一个很好的参考。
答案 3 :(得分:0)