java.lang.IllegalArgumentException:'retrofit2.Response'不是有效的响应正文类型。你是说ResponseBody吗?对于方法 Api.NewLo



我正在尝试设置要使用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);
}

这个错误/警告是非常不言自明的IMO。在API中,您使用的是Reform的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);
}
});

不要忘记在任何使用ResponseBody类的地方导入okhttp3.ResponseBody;

最新更新