我如何在 Android 中重用 Retrofit 代码
How can i reuse Retrofit code in Android
以下代码是我目前使用的方式 Retrofit
Interface
**********
public interface LeafAPI
{
HttpLoggingInterceptor logging = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.addInterceptor(logging)
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ConstantValues.BaseUrl)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
Retrofit retrofitScr = new Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(ConstantValues.BaseUrl)
.build();
@GET("someController/serviceName")
Call<ArrayList<UserDetails>> getUserList();
}
在Activity
中的用法:
private void getUserDetails()
{
ServiceAPI api = ServiceAPI.retrofit.create(ServiceAPI.class);
Call<ArrayList<UserDetails>> call=api.getUserList();
call.enqueue(new Callback<ArrayList<UserDetails>>() {
@Override
public void onResponse(Call<ArrayList<UserDetails>> call, retrofit2.Response<ArrayList<UserDetails>> response) {
//Process the result and display in the UI
}
@Override
public void onFailure(Call<ArrayList<UserDetails>> call, Throwable t) {
//Display Error Message
}
});
}
我的情况是,我必须 fetch
userlist
个 activities
。
所以我最终在每个方法中都复制了 getUserDetails()
方法。
我想知道是否可以将 getUserDetails
移动到单独的 Class
然后从那里重新使用它。我环顾四周,但 retrofit
上的所有示例都与我在上面放置的内容类似。
如果能为我指明正确的方向,我将不胜感激。
为此你可以做的是制作一个名为 GetListingUtility
的 class 并将此方法放入此 GetListingUtility
class.
例如:
public class GetListingUtility{
Context context;
OnItemSelected onItemSelected;
public GetListingUtility(Context context, OnItemSelected onItemSelected) {
this.context = context;
this.onItemSelected = onItemSelected;
}
private void getUserDetails()
{
ServiceAPI api = ServiceAPI.retrofit.create(ServiceAPI.class);
Call<ArrayList<UserDetails>> call=api.getUserList();
call.enqueue(new Callback<ArrayList<UserDetails>>() {
@Override
public void onResponse(Call<ArrayList<UserDetails>> call, retrofit2.Response<ArrayList<UserDetails>> response) {
//Process the result and display in the UI
}
@Override
public void onFailure(Call<ArrayList<UserDetails>> call, Throwable t) {
//Display Error Message
}
});
}
}
然后你可以这样调用这个方法:
private void callGetCountriesWS() {
GetListingUtility utility = new GetListingUtility(getActivity(), new OnItemSelected() {
@Override
public void onItemSelected(Object kv) {
// your stuff you want to do
}
});
utility.getUserDetails();
}
您可以通过 callback
本身在 Activity
上处理它:
public class ApiCalls {
public static void getUserDetails(Callback<ArrayList<UserDetails>> callback) {
ServiceAPI api = ServiceAPI.retrofit.create(ServiceAPI.class);
Call<ArrayList<UserDetails>> call=api.getUserList();
call.enqueue(callback);
}
}
在你的 Activity
上:
ApiCalls.getUserDetails(new Callback<ArrayList<UserDetails>>() {
@Override
public void onResponse(Call<ArrayList<UserDetails>> call, retrofit2.Response<ArrayList<UserDetails>> response) {
//now you can handle it on your activity, yey.
}
@Override
public void onFailure(Call<ArrayList<UserDetails>> call, Throwable t) {
//Display Error Message
}
});
以下代码是我目前使用的方式 Retrofit
Interface
**********
public interface LeafAPI
{
HttpLoggingInterceptor logging = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.addInterceptor(logging)
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ConstantValues.BaseUrl)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
Retrofit retrofitScr = new Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(ConstantValues.BaseUrl)
.build();
@GET("someController/serviceName")
Call<ArrayList<UserDetails>> getUserList();
}
在Activity
中的用法:
private void getUserDetails()
{
ServiceAPI api = ServiceAPI.retrofit.create(ServiceAPI.class);
Call<ArrayList<UserDetails>> call=api.getUserList();
call.enqueue(new Callback<ArrayList<UserDetails>>() {
@Override
public void onResponse(Call<ArrayList<UserDetails>> call, retrofit2.Response<ArrayList<UserDetails>> response) {
//Process the result and display in the UI
}
@Override
public void onFailure(Call<ArrayList<UserDetails>> call, Throwable t) {
//Display Error Message
}
});
}
我的情况是,我必须 fetch
userlist
个 activities
。
所以我最终在每个方法中都复制了 getUserDetails()
方法。
我想知道是否可以将 getUserDetails
移动到单独的 Class
然后从那里重新使用它。我环顾四周,但 retrofit
上的所有示例都与我在上面放置的内容类似。
如果能为我指明正确的方向,我将不胜感激。
为此你可以做的是制作一个名为 GetListingUtility
的 class 并将此方法放入此 GetListingUtility
class.
例如:
public class GetListingUtility{
Context context;
OnItemSelected onItemSelected;
public GetListingUtility(Context context, OnItemSelected onItemSelected) {
this.context = context;
this.onItemSelected = onItemSelected;
}
private void getUserDetails()
{
ServiceAPI api = ServiceAPI.retrofit.create(ServiceAPI.class);
Call<ArrayList<UserDetails>> call=api.getUserList();
call.enqueue(new Callback<ArrayList<UserDetails>>() {
@Override
public void onResponse(Call<ArrayList<UserDetails>> call, retrofit2.Response<ArrayList<UserDetails>> response) {
//Process the result and display in the UI
}
@Override
public void onFailure(Call<ArrayList<UserDetails>> call, Throwable t) {
//Display Error Message
}
});
}
}
然后你可以这样调用这个方法:
private void callGetCountriesWS() {
GetListingUtility utility = new GetListingUtility(getActivity(), new OnItemSelected() {
@Override
public void onItemSelected(Object kv) {
// your stuff you want to do
}
});
utility.getUserDetails();
}
您可以通过 callback
本身在 Activity
上处理它:
public class ApiCalls {
public static void getUserDetails(Callback<ArrayList<UserDetails>> callback) {
ServiceAPI api = ServiceAPI.retrofit.create(ServiceAPI.class);
Call<ArrayList<UserDetails>> call=api.getUserList();
call.enqueue(callback);
}
}
在你的 Activity
上:
ApiCalls.getUserDetails(new Callback<ArrayList<UserDetails>>() {
@Override
public void onResponse(Call<ArrayList<UserDetails>> call, retrofit2.Response<ArrayList<UserDetails>> response) {
//now you can handle it on your activity, yey.
}
@Override
public void onFailure(Call<ArrayList<UserDetails>> call, Throwable t) {
//Display Error Message
}
});