【问题标题】:RuntimeException when call execute() on retrofit request对改造请求调用 execute() 时出现 RuntimeException
【发布时间】:2021-07-15 09:42:13
【问题描述】:

这是我的改造服务:

interface SessionService {
    @FormUrlEncoded
    @POST("auth/login")
    fun login(@FieldMap body: Map<String,String>): Call<ResponseObject<Session>>
}

调用中使用的类:

data class Session (
    @SerializedName("refreshToken")
    val refreshToken: String,
    @SerializedName("accessToken")
    val accessToken: String,
)

data class ResponseObject <T> (
    @SerializedName("errorCode")
    var errorCode: String = "",

    @SerializedName("appVersion")
    var appVersion: String = "1.0.0",

    @SerializedName("message")
    var message: String = "",

    @SerializedName("data")
    var data: T? = null,

    @SerializedName("time")
    var time: Date = format.parse("2021-07-14T00:27:10.596Z")!!
)

当我尝试使用时:

val request = sessionService.login(mapOf("username" to username, "password" to password))
val response = request.execute()

并得到这个错误: java.lang.RuntimeException:无法调用没有参数的公共 com.example.kotlin.model.ResponseObject()

我已经坚持了 3 个小时 :((。 提前致谢!

【问题讨论】:

  • 请发表您的评论ResponseObject

标签: android kotlin retrofit2


【解决方案1】:

请检查以下代码行,以帮助您进行改造

public class ApiClient {

    static ApiService webApiService;
    public static WebApiService getWebApiService(){

        if(webApiService == null){

            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

            OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
            try {
                httpClient.addInterceptor(new Interceptor() {
                    @Override
                    public Response intercept(Chain chain) throws IOException {
                        Request original = chain.request();
                        Request.Builder requestBuilder = original.newBuilder()
                                .addHeader("Connection", "keep-alive");
                        Request request = requestBuilder.build();
                        return chain.proceed(request);
                    }
                });
            }catch (Exception e){
                e.printStackTrace();
            }

            OkHttpClient okHttpClient = httpClient.addInterceptor(interceptor).connectTimeout(60, TimeUnit.SECONDS).
                    readTimeout(60, TimeUnit.SECONDS).
                    writeTimeout(60, TimeUnit.SECONDS)
                    .build();

            String baseUrl = ""+WebApiService.BASEURL;
            Retrofit retrofit = new Retrofit.Builder()
                    .client(okHttpClient)
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            webApiService = retrofit.create(ApiService.class);
        }
        return webApiService;
    }
}



 public void callloginApi(HashMap<String, String> params) {
        try {
            ApiClient.getWebApiService().loginapi(params).enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    parseResponseBody(getResponseBody(response));
                }

                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
                    Logger.i(TAG, " Error == " + t.getMessage());                   
                }
            });

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    相关资源
    最近更新 更多