Retrofit - это замечательная библиотека, она проста в использовании и обслуживании, но у меня другой случай, как мы знаем, мы должны применить этапы создания api и отклика модификации соответственно,
экземпляр дооснащения:
retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(new ErrorCallAdapter.MyCallAdapterFactory())
.client(httpClient)
.build();
return retrofit;
Интерфейс API:
@GET("api/getTheResults")
ErrorCallAdapter.MyCall<GeneralResponse<SomeEntity> getGenericMethod();
часть ErrorCallAdapter:
@Override
public void enqueue(final MyCallback<Object> callback) {
call.enqueue(new Callback<GeneralResponse<T>>() {
@Override
public void onResponse(final Call<GeneralResponse<T>> call, final Response<GeneralResponse<T>> response) {
final int code = response.code();
mainHandler.post(new Runnable() {
@Override
public void run() {
if (response.isSuccessful()) {
if (response.body().getStatus() == 1) {
callback.onResult(response.body().getResponse());
} else
callback.onError(response.body().getMError());
} else
callback.onError(new MError(code,
response.message() != null ? response.message() : "onResponse error"));
}
});
}
@Override
public void onFailure(Call<GeneralResponse<T>> call, Throwable t) {
if (t != null)
callback.onError(new MError(501,
t.getMessage() != null ? t.getMessage() : "unexpected error"));
else
callback.onError(new MError(501,
"unexpected error"));
}
});
}
часть выборки данных:
public void loadUserSetupData() {
ErrorCallAdapter.MyCall<GeneralResponse<Data>, Data> DataCall = apiManager.getData();
setupDataMyCall.enqueue(new ErrorHandlingCallAdapter.MyCallback<Data>() {
@Override
public void onResult(Data data) {
endProgressDialog();
apiResult.onSuccess(data);
}
@Override
public void onError(MError mError) {
endProgressDialog();
apiResult.onError(mError.getErrorMessage(mContext));
}
});
}
Данные, которые я пытаюсь получить, представлены в формате JSON:
{
"Status": 1,
"Error": null,
"ResponseList": [
{
"ErCode": 0,
"Masseg": null,
"DType": "OnceData",
"Contents": {
"VList": [{
"name":"name"
"name":"name"
"name":"name"
}],
"WList": [{
"name":"name"
"name":"name"
"name":"name"
}, {
"name":"name"
"name":"name"
"name":"name"
}],
"UList": [{
"name":"name"
"dd":"ddd" "DobledataType"
"object":"name" "object data type"
}, {
"name":"name"
"int":"1"
"code":"15.00" "float data type
}],
}
}
]
}
«Выше я называю« имя »как объект сущности (каждый из UList, VList, WList - это объекты только для иллюстрации).
Мой вопрос таков: как я могу сделать, чтобы модификация работала для любого типа данных, когда он будет извлекать объект, независимо от его типа, значит, я не знаю, будет ли в списке «Содержимое» объект определенного типа,Я хочу, чтобы он работал так, чтобы я мог получать любой тип, какой бы он ни был, не зная объекта, мы можем указать msg, DType (в предыдущем случае мы знали, что DType = data, например, будет выполнять какое-то действие), но мы не знаемчто тТип объекта ответа (массив строк, объектов, целых чисел или только одной строки) Как мы это делаем в модифицированной Android?