This is my method in Interface. I am calling this function but app crash with this exception:
Caused by: java.lang.IllegalArgumentException: Service m
You can always do:
@POST("/endpoint")
Call<Void> postSomething();
EDIT:
If you are using RxJava, since 1.1.1 you can use Completable class.
Based on your classes, it looks like you are using Retrofit 2.0.0, which is currently in beta. I think using a void in your service method is no longer allowed. Instead, return Call, which you can enqueue to perform the network call asynchronously.
Alternatively, drop your library down to Retrofit 1.9.0 and replace your Retrofit class with RestAdapter.
There is difference in Asynchronous in Retrofit 1.9 and 2.0
/* Synchronous in Retrofit 1.9 */
public interface APIService {
@POST("/list")
Repo loadRepo();
}
/* Asynchronous in Retrofit 1.9 */
public interface APIService {
@POST("/list")
void loadRepo(Callback<Repo> cb);
}
But on Retrofit 2.0, it is far more simple since you can declare with only just a single pattern
/* Retrofit 2.0 */
public interface APIService {
@POST("/list")
Call<Repo> loadRepo();
}
// Synchronous Call in Retrofit 2.0
Call<Repo> call = service.loadRepo();
Repo repo = call.execute();
// Asynchronous Call in Retrofit 2.0
Call<Repo> call = service.loadRepo();
call.enqueue(new Callback<Repo>() {
@Override
public void onResponse(Response<Repo> response) {
Log.d("CallBack", " response is " + response);
}
@Override
public void onFailure(Throwable t) {
Log.d("CallBack", " Throwable is " +t);
}
});
https://github.com/square/retrofit/issues/297
Please go through this link.
"All interface declarations will be required to return an object through which all interaction will occur. The behavior of this object will be similar to a Future and will be generic typed (T) for the success response type."
@GET("/foo")
Call<Foo> getFoo();
Based on the new Retrofit 2.0.0 beta You cannot specify return type as void to make it asynchronous
as per the code inside retrofit (https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit/MethodHandler.java) it will show exception when you try the previous implementation with 2.0.0 beta
if (returnType == void.class) {
throw Utils.methodError(method, "Service methods cannot return void.");
}