java.lang.IllegalArgumentException: retrofit2.Response не является допустимым типом тела ответа.Вы имели в виду ResponseBody?для метода Api.NewLocation - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь установить фиктивные данные для отправки с помощью моего API, но, к сожалению, я не могу определить ошибку в моем logCat.

Call<Response> call=RetrofitClient
                                .getmInstance()
                                .getApi()
                                .NewLocation("357040068483739","16.623463660","126.007236650",""+"2018-05-07 11:28:02","0","9090");

                                call.enqueue(new Callback<Response>() {
                                    @Override
                                    public void onResponse(Call<Response> call, Response<Response> response) {
                                        Toast.makeText(NavDrawerFleet.this, "Successful", Toast.LENGTH_SHORT).show();
                                              }

                                    @Override
                                    public void onFailure(Call<Response> call, Throwable t) {
                                        Toast.makeText(NavDrawerFleet.this`enter code here`, "Data Not Send", Toast.LENGTH_SHORT).show();
                                    }
                                });

Это мой код API.

public interface Api {

    @FormUrlEncoded
    @POST("/api/Database/NewLocation")
    Call<Response>NewLocation(
        @Field("SerialNumber")String serialNumber,
        @Field("Coordinate1")String latitude,
        @Field("Coordinate2")String longitude,
        @Field("DateTime")String dateTime,
        @Field("Speed")String speed,
        @Field("Port")String port


    );
    @FormUrlEncoded
    @POST("/api/Registration/RegisterDevice")
    Call<Response> NewRegistered(
        @Field("SerialNumber")String serialNumber,
        @Field("FirstName") String firstName,
        @Field("LastName") String lastName,
        @Field("Status") String status
    );
}

И это мой класс retrofitClient; Я наблюдал за новой реализацией retrofit2, но при тестировании в моем приложении она выдает эту ошибку, и я не могу ее определить.

public class RetrofitClient {
    private static  final  String BASE_URL="http://58.69.149.164:9114";
    private static RetrofitClient mInstance;
    private Retrofit retrofit;

    private RetrofitClient() {
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    public static  synchronized  RetrofitClient getmInstance(){
        if(mInstance==null){
            mInstance=new RetrofitClient();
        }
    return mInstance;
    }
    public Api getApi(){
        return  retrofit.create(Api.class);
    }

1 Ответ

0 голосов
/ 09 ноября 2018

Эта ошибка / предупреждение довольно понятна IMO. В вашем API вы используете Retrofit Response в качестве типа возврата вместо ResponseBody. Измените класс API, как показано ниже:

/* other imports*/
import okhttp3.ResponseBody;

public interface Api {

    @FormUrlEncoded
    @POST("/api/Database/NewLocation")
    Call<ResponseBody> NewLocation(     /* use Call<ResponseBody> */
        @Field("SerialNumber")String serialNumber,
        @Field("Coordinate1")String latitude,
        @Field("Coordinate2")String longitude,
        @Field("DateTime")String dateTime,
        @Field("Speed")String speed,
        @Field("Port")String port
    );

    @FormUrlEncoded
    @POST("/api/Registration/RegisterDevice")
    Call<ResponseBody> NewRegistered(      /* use Call<ResponseBody> */
        @Field("SerialNumber")String serialNumber,
        @Field("FirstName") String firstName,
        @Field("LastName") String lastName,
        @Field("Status") String status
    );
}

И используйте его, как показано ниже:

Call<ResponseBody> call = RetrofitClient
                            .getmInstance()
                            .getApi()
                            .NewLocation(/* paramas */);

call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        // do whatever you want
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        Log.e("tag", "Error ", t);
    }
});

И не забудьте импортировать okhttp3.ResponseBody; везде, где вы используете ResponseBody класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...