Использование Дооснащение довольно прост и понятен.
Прежде всего, вам необходимо добавить модификацию в проект, например, с помощью системы сборки Gradle.
compile 'com.squareup.retrofit:retrofit:1.7.1' |
другой способ вы можете скачать .jar и поместить его в свою папку с папками.
Затем вам необходимо определить интерфейсы, которые будут использоваться Retrofit для вызова API для ваших конечных точек REST. Например, для пользователей:
public interface YourUsersApi {
//You can use rx.java for sophisticated composition of requests
@GET("https://stackoverflow.com/users/{user}")
public Observable<SomeUserModel> fetchUser(@Path("user") String user);
//or you can just get your model if you use json api
@GET("https://stackoverflow.com/users/{user}")
public SomeUserModel fetchUser(@Path("user") String user);
//or if there are some special cases you can process your response manually
@GET("https://stackoverflow.com/users/{user}")
public Response fetchUser(@Path("user") String user);
}
Ok. Теперь вы определили свой интерфейс API, и можете попробовать его использовать.
Для начала вам нужно создать экземпляр RestAdapter и установить базовый адрес вашего API фоновым. Это также довольно просто:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://yourserveraddress.com")
.build();
YourUsersApi yourUsersApi = restAdapter.create(YourUsersApi.class);
Здесь дооснащения будет читать информацию из интерфейса и под капотом он будет создавать RestHandler согласно мета-информации ваши предоставленные которые фактически будут выполнять запросы HTTP.
Затем под капотом, после получения ответа, в случае json api ваши данные будут преобразованы в вашу модель с использованием библиотеки Gson, поэтому вы должны знать об этом факте, что ограничения, которые присутствуют в Gson, действительно присутствуют в Retrofit ,
Чтобы продлить/переопределить процесс сериализации/десериализации ваших данных ответа на ваши модели, вы можете захотеть предоставить свои пользовательские сериализаторы/десеризаторы для модернизации.
Здесь вам нужно реализовать интерфейс конвертер и реализовать 2 метода fromBody() и toBody().
Вот пример:
public class SomeCustomRetrofitConverter implements Converter {
private GsonBuilder gb;
public SomeCustomRetrofitConverter() {
gb = new GsonBuilder();
//register your cursom custom type serialisers/deserialisers if needed
gb.registerTypeAdapter(SomeCutsomType.class, new SomeCutsomTypeDeserializer());
}
public static final String ENCODING = "UTF-8";
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException {
String charset = "UTF-8";
if (body.mimeType() != null) {
charset = MimeUtil.parseCharset(body.mimeType());
}
InputStreamReader isr = null;
try {
isr = new InputStreamReader(body.in(), charset);
Gson gson = gb.create();
return gson.fromJson(isr, type);
} catch (IOException e) {
throw new ConversionException(e);
} catch (JsonParseException e) {
throw new ConversionException(e);
} finally {
if (isr != null) {
try {
isr.close();
} catch (IOException ignored) {
}
}
}
}
@Override
public TypedOutput toBody(Object object) {
try {
Gson gson = gb.create();
return new JsonTypedOutput(gson.toJson(object).getBytes(ENCODING), ENCODING);
} catch (UnsupportedEncodingException e) {
throw new AssertionError(e);
}
}
private static class JsonTypedOutput implements TypedOutput {
private final byte[] jsonBytes;
private final String mimeType;
JsonTypedOutput(byte[] jsonBytes, String encode) {
this.jsonBytes = jsonBytes;
this.mimeType = "application/json; charset=" + encode;
}
@Override
public String fileName() {
return null;
}
@Override
public String mimeType() {
return mimeType;
}
@Override
public long length() {
return jsonBytes.length;
}
@Override
public void writeTo(OutputStream out) throws IOException {
out.write(jsonBytes);
}
}
}
И теперь вам нужно активировать пользовательские адаптеры, если это было необходимо с помощью setConverter() на строительство RestAdapter
Ok. Теперь вы знаете, как вы можете получать свои данные с сервера на свое приложение для Android. Но вам нужно как-то сжать ваши данные и вызвать звонок REST в нужном месте. Там я бы предложил использовать службу android Service или AsyncTask или загрузчик или rx.java, которые будут запрашивать ваши данные в фоновом потоке, чтобы не блокировать ваш пользовательский интерфейс.
Итак, теперь вы можете найти наиболее подходящее место, чтобы позвонить
SomeUserModel yourUser = yourUsersApi.fetchUser("someUsers")
принести удаленные данные.
Я не нахожу достаточно документации/учебников для использования Модернизации. –
Вы поняли это? –
лучше использовать залп для быстрой работы в сети. – Dev