我如何在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如果没有必要,不要使用静态方法