I want a POST call on an URL, and as response I just get a String \"ok\" or \"no\".. So I have here my interface like this:
public interface registerAPI
{
Ok the answer is to write an own converter. Like this:
public final class ToStringConverterFactory extends Converter.Factory {
@Override
public Converter<ResponseBody, ?> fromResponseBody(Type type, Annotation[] annotations) {
//noinspection EqualsBetweenInconvertibleTypes
if (String.class.equals(type)) {
return new Converter<ResponseBody, Object>() {
@Override
public Object convert(ResponseBody responseBody) throws IOException {
return responseBody.string();
}
};
}
return null;
}
@Override
public Converter<?, RequestBody> toRequestBody(Type type, Annotation[] annotations) {
//noinspection EqualsBetweenInconvertibleTypes
if (String.class.equals(type)) {
return new Converter<String, RequestBody>() {
@Override
public RequestBody convert(String value) throws IOException {
return RequestBody.create(MediaType.parse("text/plain"), value);
}
};
}
return null;
}
}
You have to call it with this:
Retrofit adapter = new Retrofit.Builder()
.baseUrl("http://root.url.net/")
.addConverterFactory(new ToStringConverterFactory())
.build();
registerAPI api = adapter.create(registerAPI.class);
Call<String> call = api.insertUser(name,regid);
You get the response in this:
call.enqueue(new Callback<String>()
{
@Override
public void onResponse(Response<String> response, Retrofit retrofit)
{
Log.i("http","innen: " + response.message());
Log.i("http","innen: " + response.body()); // here is your string!!
}
@Override
public void onFailure(Throwable t)
{
Log.d("http", " Throwable " +t.toString());
}
});
@Klatschen your answer is right,in Retrofit2 the abstarct function has changed.
public final class StringConverterFactory extends Converter.Factory {
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
if (String.class.equals(type)) {
return new Converter<ResponseBody, Object>() {
@Override
public Object convert(ResponseBody responseBody) throws IOException {
return responseBody.string();
}
};
}
return null;
}
@Override
public Converter<?, RequestBody> requestBodyConverter(Type type,
Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
if (String.class.equals(type)) {
return new Converter<String, RequestBody>() {
@Override
public RequestBody convert(String value) throws IOException {
return RequestBody.create(MediaType.parse("text/plain"), value);
}
};
}
return null;
}
}