Tag: 翻新

改进API调用:如何确保在进行api调用后该值不为空?

我有下面的AuthenticationResponse模型,我使用retrofit2进行3个API调用。 如果我进行了verifyEmail调用,那么JSON响应主体只包含有效的电子邮件属性(如{“validEmail”:true})。 其他2个调用只包含“resetSuccesful”或其他4的属性。 我怎样才能确保/检查,当我收到verifyEmail调用的响应fe,它包含一个非空的validEmail值? 服务: interface AuthenticationService { @POST(“auth/checkEmail”) fun verifyEmail(@Body email: String): Call @POST(“auth/login”) fun login(@Body loginCredentials: LoginCredentials): Call @POST(“auth/resetPassword”) fun resetPassword(@Body email: String): Call } 模型: data class AuthenticationResponse( val validEmail: Boolean? = null, val loginSuccess: Boolean? = null, val retriesLeft: Int? = null, val authToken: String? = null, val accountBlocked: Boolean? = […]

call.enqueue正在阻塞第一个请求

我在Kotlin编写的Android应用程序中使用Retrofit 2来调用API。 我的电话如下所示: val time = measureTimeMillis { val call = geocodingApi.searchByName(“Berlin”) call.enqueue(object : Callback { override fun onResponse(call: Call?, response: Response?) { // some code } override fun onFailure(call: Call?, t: Throwable?) { // some code } }) } Timber.d(“searching by name took $time ms”) geocodingApi在我的类的构造函数中初始化如下: val loggingInterceptor = HttpLoggingInterceptor(HttpLoggingInterceptor.Logger { Timber.d(it) }) loggingInterceptor.level […]

IncompatibleClassChangeError:类’java.lang.VirtualMachineError’没有实现接口’java.lang.CharSequence’

我的代码有奇怪的问题,我无法解释发生的任何事情。 它是在棉花糖崩溃,但没有牛轧糖,这使得这更离奇。 我可以指向一个错误发生的地方,但是错误本身并不清楚。 我不知道什么是崩溃,以及如何防止它。 以下是详细信息: 当我尝试打电话给服务器时发生崩溃。 为此,我使用RxJava旁边的RxJava ,我在Kotlin中做这个。 这是我的代码: fun login(username: String, password: String, callback: Login.OnLoginListener) { RestClient.getInstance().service .loginUser( // ( if (success.status) callback.onLoginSuccess() else callback.onLoginError() ) }, { error -> GenericErrorHandler.handleError(error, callback.retrieveContext()) } ) } 这里是logcat输出: java.lang.IncompatibleClassChangeError: Class ‘java.lang.VirtualMachineError’ does not implement interface ‘java.lang.CharSequence’ in call to ‘java.lang.String java.lang.CharSequence.toString()’ (declaration of ‘java.lang.Throwable’ appears in […]

如何在Retrofit 2中处理POST请求响应?

我试图将appVersion和deviceName作为String发送到服务器,并获取systemDate和token为字符串作为响应。 这是我在Kotlin的POJO: class InitPost { @SerializedName(“appVersion”) @Expose var versionName: String? = null @SerializedName(“deviceName”) @Expose var manufacturer: String? = null } Api服务: @POST(“getRequest”) Call postInit(@Body InitPost initPost); 在我的活动中: apiService.postInit(initPost) .enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if(response.isSuccessful()){ Timber.d(“INIT POST SUCCESSFUL”); } } @Override public void onFailure(Call call, Throwable t) { Timber.e(“INIT POST […]

快速翻新吗?

我现在正在使用改造。 另外,我使用下面的库。 ================= GSON-2.8.2.jar GSON-2.8.2-javadoc.jar hamcrest核-1.3.jar 基于JUnit 4.12.jar okhttp-3.9.1.jar 奥基奥-1.13.0.jar 改装的2.3.0.jar ================ 问:复古适合速度真快吗? 由于我的测试,它太慢了。 平均速度:2500毫秒,个人代码平均速度:900毫秒 这是真的,我正确地使用它? (科特林) 以下是使用Retrofit的代码。 interface ApiService { @GET(“/lol/summoner/v3/summoners/by-name/{name}”) fun getSummonerByName(@Path(“name”) name : String, @Query(“api_key”) apiKey : String): Call } fun getSummonerByName(summonerName: String, apiKey: String): SummonerDTO? { var retrofit = Retrofit.Builder().baseUrl(“https://” + HOST + “”).addConverterFactory(GsonConverterFactory.create()).build() var service = retrofit.create(ApiService::class.java) var repos = […]

等待API调用以完成RxJava和Retrofit

我正在使用RxAndroid和RxJava和Kotlin向API发出各种请求,并以异步方式将其收回: getClient().sendSomeData(data) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( { Log.i(“upload”, “data ok”) }, { t -> Log.e(“upload”, “data error: ” + t.stackTrace) } ); getClient().sendSomeOtherData(otherData) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( { Log.i(“upload”, “otherData ok”) }, { t -> Log.e(“upload”, “data error: ” + t.stackTrace) } ); 等等。 现在我想要做的是,等待所有api请求完成并显示进度。 我如何等待所有可观察的事情完成并获得进展回调?

Gson toJson和ArrayList在Kotlin

类似于这个问题,我想将一个对象(实际上,它是一个来自翻新的API响应)转换成json字符串,所以将它存储在某个地方会更简单。 响应结构是这样的: { “metadata”: { “count”: 0, “type”: “string” }, “results”: [ { “obj1”: { “param1”: “s1”, “param2”: “s2” }, “obj2”: { “param3”: 0, “param4”: 0, “param5”: 0 }, “obj3”: 0, “obj4”: “27/12/2017” } ] } 使用List ,我将结果数组存储在一个List ,这是我传递给Gson().toJson ,如下所示: var contentResponse: String = “” try{ this.contentResponse.plus(Gson().toJson(response)) } catch (e: Exception){ Log.e(“Gson error”, e.toString()) } […]

Kotlin原生等同于Retrofit

Kotlin native为我们提供了跨平台开发和本地可执行文件的承诺,是否还有相当于Kotlin Native的Java lib Retrofit? IOW是否有一个纯粹的Kotlin网络库,使得创建http客户端代码变得简单,并且像Retrofit那样快速地实现Java?