Make a GET and POST service call with Retrofit wit

2019-07-23 10:42发布

问题:

Can anyone please give me some example how we can use protobuf in retrofit - I tried but its failed with some error , let me give you a sample of my implementation on that.

I hope you guys will help me.

ApiInterface.java

public interface ApiInterface {
@GET
Call<CommonProto.Country> makeGetRequest(@Url String url);
}

ApiClient.java

public class ApiClient {

public static final String BASE_URL = "**************************";

private static Retrofit retrofit = null;


public static Retrofit getClient() {
    if (retrofit==null) {
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(Proto3ConverterFactory.create())
                .build();
    }
    return retrofit;
}
}

MainActivity.java

ApiInterface apiService =
            ApiClient.getClient().create(ApiInterface.class);

Call<CommonProto.Country> call = apiService.makeGetRequest("Services/CountryServices/GetAllCountry");

    call.enqueue(new Callback<CommonProto.Country>() {
                     @Override
                     public void onResponse(Call<CommonProto.Country> call, Response<CommonProto.Country> response) {
                         String bodyString = null;
                         try {
                             Log.e("RETROFIT  ::::::: ", String.valueOf(response.body())+"TEST");
                         } catch (Exception e) {
                             Log.e("RETROFIT ERROR  ::::::: ", e.getMessage()+"TEST");
                             e.printStackTrace();
                         }

                     }

                     @Override
                     public void onFailure(Call<CommonProto.Country> call, Throwable t) {
                         // Log error here since request failed
                         Log.e(TAG, t.toString());
                     }
                 }

    ); 

when i run this way i got the error

java.lang.RuntimeException: com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.

my Proto.java file and also have Proto.proto file both are here in this link, https://drive.google.com/folderview?id=0B4loQuzINvHCRUlNbk5LUXE1NXM&usp=sharing

Please let me know how to do this GET Req and also I was Struggling with POST Req.

回答1:

you can create interface like this

public interface LoginInterface {
@FormUrlEncoded
@POST("url goes here")
Call<LoginResponseData> getUserLoginDeatail(@FieldMap Map<String, String> fields);

}

make an instance of retro file and call interface method something like this

 Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("base url")
            .build();

    webApis = retrofit.create(WebApis.class);

    Call<LoginResponseData> call = webApis.getCurrentRide(keyValue);
    call.enqueue(new Callback<LoginResponseData>() {
        @Override
        public void onResponse(Call<LoginResponseData> call, Response<LoginResponseData> response) {
            try {



            } catch (Exception e) {
                // customizedToast.showToast(context.getResources().getString(
                // R.string.exception));
                e.printStackTrace();
            }


        }

        @Override
        public void onFailure(Call<LoginResponseData> call, Throwable t) {


        }
    });

for protocol buffer you can find a reference here