【发布时间】:2015-12-15 19:12:23
【问题描述】:
我开发 Android 客户端,从服务器获取订单列表。对于 http 请求,我使用 Retrofit 库,并将 api 服务包装在 ApiClient 类中
public class ApiClient {
private ApiService apiService;
public ApiClient() {
Gson gson = new GsonBuilder()
.setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'")
.create();
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(BuildConfig.API_SERVER)
.setConverter(new GsonConverter(gson))
.build();
apiService = restAdapter.create(ApiService.class);
}
public ApiService getApiService() {
return apiService;
}
}
现在在MainActivity我调用ApiService接口的gerOrders来获取订单列表。
ApiService service = new ApiClient().getApiService();
service.getOrders(callback);
Callback callback = new Callback() {
@Override
public void success(Object o, Response response) {
Log.d("TestObject", new Gson().toJson(o));
}
@Override
public void failure(RetrofitError retrofitError) {
}
};
但是这个订单列表可能会在其他活动中使用,我认为,在活动或片段中获取数据并不好。我怎样才能很好地组织这段代码?
【问题讨论】:
-
您的应用打算多久从服务器获取数据?
-
每分钟一次,或者,可能是几秒钟。但是,当数据每小时或每天提取一次时,我也很感兴趣。
-
那么如果你需要频繁的数据,你可以在其他活动中调用getOrders()方法来获取订单数据。你的具体问题是什么?
-
这里不能使用
contentProvider,因为它用于在设备中的应用程序之间共享数据。如果响应需要很长时间,您可以使用服务,我在这里看不到这种情况。所以你需要调用网络调用方法是AsyncTask,这将解决你的问题。 -
对不起,我忽略了你代码的实现。不需要
AsyncTask这个实现已经是异步的了。您使用的是正确的方式。
标签: android