我如何在Android中重用改装代码
以下代码是我当前如何使用我如何在Android中重用改装代码,android,retrofit,code-reuse,Android,Retrofit,Code Reuse,以下代码是我当前如何使用改装 Interface ********** public interface LeafAPI { HttpLoggingInterceptor logging = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC); OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
改装
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();
}
我的情况是,我必须在许多活动中获取用户列表
。
因此,我在每个方法中都复制了getUserDetails()
方法
我想知道是否可以将getUserDetails
移动到一个单独的类
,然后从那里重用它。我环顾了一下四周,但所有关于改装的示例都遵循了与上面类似的内容
我真的很感激任何能为我指明正确方向的帮助 为此,您可以创建一个名为GetListingUtility
的类,并将此方法放在这个GetListingUtility
类中
对于ex:
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
}
});
}
}
为此,您可以创建一个名为GetListingUtility
的类,并将此方法放入这个GetListingUtility
类中
对于ex:
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 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
}
});
}
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);
}
}
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
}
});
您可以传递回调
本身,以便在活动
上处理它:
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
}
});
}
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);
}
}
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
}
});
是的,您可以使用move-it来分离类并重新使用它,并对活动进行回调。如果您的项目不断增长,那么也许是时候使用一些架构模式了(比如MVP、MVVM)。查看这个在MVP项目中使用改造的简单示例:我还建议您浏览这个视频。您不需要进行改装和改装。有关更多信息,请观看video@Raghunandan谢谢,我觉得这个链接很有用。谢谢,我不明白为什么投反对票,有人能指出这一点吗?是的,你可以使用移动它来分离类,重新使用它,并对活动进行回调。如果你的项目增长了,那么也许是时候使用一些架构模式了(如MVP、MVVM)。查看这个在MVP项目中使用改装的简单示例:我还建议您观看此视频。您不需要进行改装和改装。有关更多信息,请观看video@Raghunandan谢谢,我觉得这个链接很有用。谢谢,我不明白投票被否决的原因,有人能指出这一点吗建议与我的代码没有太大区别,因为我们仍然需要重写getUserDetails(新回调)。在所有的活动中。对不起,我没有很好地解释它,getUserDetails()
将是通用的,它将只在一个类上编写。如果您不想回调,请检查更新的代码(因为它仍然很大)我们可以添加一个自定义接口来处理列表响应。我觉得您的建议与我的代码没有太大区别,因为我们仍然需要在所有活动中重写getUserDetails(新回调)。抱歉,我没有解释清楚,getUserDetails()
将是通用的,它将只写在一个类上。请检查更新的代码,如果您不想回调(因为它仍然很大),我们可以添加一个自定义接口来处理列表响应。getUserDetails()
可能应该声明为public
@chandani c patel,如果我理解正确,“OnItemSelected”是一个接口,具有OnItemSelected(Object kv)方法。这正确吗。@chandani c patel如果我更改getUserDetails()会影响我的内存使用吗到静态方法并直接传递上下文和接口。@Deepak如果没有必要不要使用静态方法getUserDetails()
可能应该声明为public
@chandani c patel如果我理解正确,“OnItemSelected”是一个接口,带有OnItemSelected方法(对象kv)。这是否正确。@如果我将getUserDetails()更改为静态方法并直接传递上下文和接口,chandani c patel会影响我的内存使用情况。@Deepak如果没有必要,不要使用静态方法