gpt4 book ai didi

java - Retrofit 所有 api 的可重用方法

转载 作者:搜寻专家 更新时间:2023-11-01 09:29:26 24 4
gpt4 key购买 nike

我有以下代码

public void callMatchListApi() {
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

Call<NewMatchList> apiList = apiService.getNewMatchListCallListCall(API_KEY);
apiList.enqueue(new Callback<NewMatchList>() {
@Override
public void onResponse(Call<NewMatchList> call, Response<NewMatchList> response) {
//NewMatchList newMatchList=response.body();


Log.d("ApiCall", String.valueOf(response.body().getMatchList().get(0).getTeam1()));
// Log.d("ApiCall_22",newMatchList.getMatchList().get(0).getTeam1());
Toast.makeText(getApplicationContext(), "inside", Toast.LENGTH_LONG).show();
}

@Override
public void onFailure(Call<NewMatchList> call, Throwable t) {
Log.d("ApiCall_Error", t.toString());
}
});
}

这里 NewMatchList 是 pojo 模态类。所以我需要将这个 NewMatchList 变成动态对象,这样我就可以将它传递给 callMatchListApi() 可重复使用。我尝试将 NewMatchList 替换为参数中的对象引用以及类名,但它会抛出错误。因为我是 android 的新手,任何人都可以帮助我解决这个问题。

最佳答案

如果您认为 Object 对您没有帮助,您也可以使用泛型:

public <T> void callApi(T classz) {
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

Call<T> apiList = apiService.getNewMatchListCallListCall(API_KEY);
apiList.enqueue(new Callback<T>() {
@Override
public void onResponse(Call<T> call, Response<T> response) {
//T T=response.body();


Log.d("ApiCall", String.valueOf(response.body().getMatchList().get(0).getTeam1()));
// Log.d("ApiCall_22",T.getMatchList().get(0).getTeam1());
Toast.makeText(getApplicationContext(), "inside", Toast.LENGTH_LONG).show();

processResponse(response, classz);
}

@Override
public void onFailure(Call<T> call, Throwable t) {
Log.d("ApiCall_Error", t.toString());
}
});
}

private <T> void processResponse(Response<T> response, T classz) {
if (classz instanceof OneModel) {
processOneModelResponse(response);
}
if (classz instanceof AnotherModel) {
processOAnotherModelResponse(response);
}
}

您看到的不是您的 NewMatchList 对象,而是我们有一个通用类型 T 并且我们可以将它作为参数传递。

现在您可以按如下方式调用该方法:

callApi(NewMatchList.class)

您可能想要稍微重构的一件事是 apiService.getNewMatchListCallListCall(API_KEY)。在调用该方法之前,您可能希望在外部某处提取该方法调用,因为我认为您的 apiService 具有不同的方法和不同的 Call 类型。

更新:您可以添加一个方法来处理您收到的每个响应的业务逻辑。类似 processResponse 的东西,然后您将在其特定方法(processOneModelResponseprocessAnotherModelResponse)中处理每种特定类型的模型(使用 instance of) )

关于java - Retrofit 所有 api 的可重用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48364760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com