Tag: 翻新

如何使MockWebServer工作?

我正在开发一个使用MVP架构的应用程序。 我正在尝试使用MockWebServer来测试我的应用程序的交互器。 那么,我有这个测试: @RunWith(RobolectricTestRunner::class) @Config(constants = BuildConfig::class, manifest = "src/main/AndroidManifest.xml", packageName = "br.com.simplepass.simplepassnew", sdk = intArrayOf(23)) class LoginInteractorImplTest { lateinit var mLoginInteractor : LoginInteractor lateinit var mServer: MockWebServer @Before fun setUp(){ mLoginInteractor = LoginInteractorImpl() mServer = MockWebServer() mServer.start() } @Test fun loginTest(){ mServer.url("http://192.168.0.10:8080/login") val testSubscriber = TestSubscriber.create<User>() mLoginInteractor.login("31991889992", "lala").subscribe(testSubscriber) testSubscriber.assertNoErrors() // testSubscriber.assertCompleted() } @After fun […]

改进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<AuthenticationResponse> @POST("auth/login") fun login(@Body loginCredentials: LoginCredentials): Call<AuthenticationResponse> @POST("auth/resetPassword") fun resetPassword(@Body email: String): Call<AuthenticationResponse> } 模型: data class AuthenticationResponse( val validEmail: Boolean? = null, val loginSuccess: Boolean? = null, val retriesLeft: Int? = null, val authToken: String? = null, val accountBlocked: Boolean? = […]

如何实施一个有限的调用与改造阻塞客户端和协程

我有以下代码: val context = newFixedThreadPoolContext(nThreads = 10, name="myThreadPool") val total = 1_000_000 //can be other number as well val maxLimit = 1_000 return runBlocking { (0..total step maxLimit).map { async(context) { val offset = it val limit = it + maxLimit blockingHttpCall(offset, limit) } }.flatMap { it.await() }.associateBy { … }.toMutableMap() } 我想只有10个电话同时发生阻塞的API。 但是,上面的代码似乎没有按照我的预期(我认为所有的调用立即开始),或者至少我不明白,如果它。 什么是实施它的正确方法? […]

Retrofit2标量转换器不转换之前gson转换器android

我在Android中使用标量转换器工厂以及gson转换器之后进行了以下改进,但是当我调用字符串调用时,响应以字符串的形式出现,它给了我“不是JSON对象:”成功的例外。 我错过了什么? 改造创造: Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create(gson)) .baseUrl(IPService.END) .client(new OkHttpClient.Builder().build()) .build(); 创建电话: @POST("/friends/sendRequest") Call<String> sendFriendRequest(…); 呼叫执行: Response<String> a = myApi.sendFriendRequest(…).execute(); 反应的身体是“成功”。

使用Retrofit 2.0和RxJava获取响应状态代码

我正在尝试升级到Retrofit 2.0,并在我的Android项目中添加RxJava。 我正在做一个API调用,并希望检索错误代码的情况下,从服务器的错误响应。 Observable<MyResponseObject> apiCall(@Body body); 在RxJava调用中: myRetrofitObject.apiCall(body).subscribe(new Subscriber<MyResponseObject>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(MyResponseObject myResponseObject) { //On response from server } }); 在1.9版本中,RetrofitError仍然存在,我们可以通过以下方式获得状态: error.getResponse().getStatus() 如何使用RxJava进行Retrofit 2.0操作?

如何使用改进发送请求到tt-rss api

我已经阅读了很多关于Retrofit的内容,但是如何使用改进来实现对tt-rss api的post请求。 在tt-rss api文档中,它说使用curl来测试登录请求,应该是这样的: $ curl -d '{"op":"login","user":"you","password":"xxx"}' http://example.dom/tt-rss/api/ 我已经使用了下面的调用,但给了我“NOT_LOGGED_IN”的错误信息 @FormUrlEncoded @POST("/api/login") Observable<login> doLogin(@Field("user") String user,@Field("password") String password); 我不知道这个电话有什么问题

如何在测试时注入不同的客户端进行改造?

有什么方法可以改变用Dagger将具有不同客户端的Retrofit模块注入到仪器测试的RestAdapter上的方法吗? @Provides @Singleton public APIService getAPIService() { RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(BuildConfig.HOST) .build(); return restAdapter.create(APIService.class); } 但是,我想在执行仪器测试时设置一个新的客户端。 @Provides @Singleton public APIService getAPIService() { RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(BuildConfig.HOST) .setClient(new MockClient()) .build(); return restAdapter.create(APIService.class); } 有没有办法做到这一点? 谢谢

使用GSON获取嵌套的JSON对象

我从我的android应用程序使用API​​,所有的JSON响应是这样的: { 'status': 'OK', 'reason': 'Everything was fine', 'content': { < some data here > } 问题是我所有的POJO都有一个status , reason字段,而content字段里面是我想要的真正的POJO。 有什么办法可以创建一个Gson自定义转换器来提取总是content字段,所以改造返回适当的POJO?

使用改造方法更具表现力的方式

我想使void enqueue(Callback<T> callback); 方法调用代码块更有表现力,下面是我通常的一个 request.enqueue(object : Callback<MyModel> { override fun onFailure(call: Call<MyModel>?, t: Throwable?) { // } override fun onResponse(call: Call<MyModel>?, response: Response<MyModel>?) { // } }) 而想要什么和意思是,要改变这个代码块更清洁的方式,并删除这些覆盖,对象,回调关键字,并做这样的事情: request.enqueue({throwable, response -> }) 我认为可以使用扩展和更高阶的函数来改进。 有谁知道它是如何做到的?

Retrofit 2.0如何获得反序列化的错误response.body

我正在使用Retrofit 2.0.0-beta1 。 在测试中,我有一个替代方案,并期望HTTP 400错误 我想有retrofit.Response<MyError> response但response.body() == null MyError没有反序列化 – 我只能在这里看到它 response.errorBody().string() 但它不会给我MyError作为对象