Articles of retrofit2

改造 – 多部分请求:必需的MultipartFile参数’file’不存在

我正在尝试使用Retrofit2在服务器上发送文件。 我根据文档做了一切,但总是得到400服务器错误。 我试着这样做: RequestBody body = RequestBody.create(MediaType.parse(“image/png”), photo); //………. @Multipart @POST(ADD_PHOTO) Observable addPhoto(@Part(“file”) RequestBody file); ……并且像这样: MultipartBody.Part part = MultipartBody.Part.createFormData(“file”, “file”, body); //……….. @Multipart @POST(ADD_PHOTO) Observable addPhoto(@Part(“file”) MultipartBody.Part files); 无所谓 结果始终相同“多部分请求:不存在所需的MultipartFile参数’文件’” – 服务器响应。 我认为服务器上的Spring工作不好,但我在Swift(iOS)上做了相同的代码,它的工作原理! 这里服务器看到这个’文件’部分。 Alamofire.upload(method, endpoint, headers: headers, multipartFormData: { multipartFormData in multipartFormData.appendBodyPart(fileURL: self.filePath!, name: “file”) } 现在我希望它可以在Android上使用Retrofit。 但我甚至查看了Retrofit请求的日志,实际上我在日志中看不到任何“文件”文本。 这有什么问题?

okhttp – 拦截器 – 阻止非致命exception被记录到Crashlytics

我在Android应用程序中使用Retrofit,这反过来意味着我使用OkHttp。 我刚刚去了阿尔法,并在我的崩溃报告中看到了一些非致命的exception被记录。 所有这些都源于我的okhttp拦截器,然后记录的exception似乎都是在网络可能不稳定或连接丢失等情况下有效的事情。 我怎样才能这样做,以便这些exception不会记录到崩溃关系中,从而混淆了我对应用程序中出现的exception的看法? 一些例外的例子: > Non-fatal Exception: javax.net.ssl.SSLHandshakeException Connection closed by peer okhttp3.internal.connection.RealConnection.connectTls (RealConnection.java:281) okhttp3.internal.connection.RealConnection.establishProtocol (RealConnection.java:251) okhttp3.internal.connection.RealConnection.connect (RealConnection.java:151) okhttp3.internal.connection.StreamAllocation.findConnection (StreamAllocation.java:192) okhttp3.internal.connection.StreamAllocation.findHealthyConnection (StreamAllocation.java:121) okhttp3.internal.connection.StreamAllocation.newStream (StreamAllocation.java:100) okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:42) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67) okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:93) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67) okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.java:93) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92) okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:120) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67) MY_INTERCEPTOR.intercept (AuthenticationInterceptor.java:30) 和 > Non-fatal Exception: javax.net.ssl.SSLException Read […]

RxJava:如何使用zip操作符处理错误?

我正在使用RxJava和RxAndroid与Retrofit2。 Observable responseOneObservable = getRetrofitClient().getDataOne() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); Observable responseTwoObservable = getRetrofitClient().getDataTwo() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); 在上面两个Observer上使用如下的zip操作符。 Observable<ArrayList> testDataObservable = Observable.zip(responseOneObservable, responseTwoObservable, new Func2<ResponseOne, ResponseTwo, ArrayList>() { @Override public ArrayList call(ResponseOne responseOne, ResponseTwo responseTwo) { ArrayList testDataList = new ArrayList(); // Add test data from response responseOne & responseTwo return testDataList; } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<ArrayList>() { […]

IllegalArgumentException:找不到rx.Observable RxJava,Retrofit2的调用适配器

我在调用其余的api时遇到上述错误。 我正在使用retrofit2和RxJava。 ServiceFactory.java public class ServiceFactory { public static T createRetrofitService(final Class clazz, final String endpoint){ Retrofit retrofit = new Retrofit.Builder() .baseUrl(endpoint) //.addConverterFactory(GsonConverterFactory.create()) .build(); T service = retrofit.create(clazz); return service; } } MovieService.java public interface MovieService{ //public final String API_KEY = “”; public final String SERVICE_END = “https://api.mymovies.org/3/”; @GET(“movie/{movieId}??api_key=xyz”) Observable<Response> getMovies(@Field(“movieId”) int movieId); } 内部MainActivity […]

在Retrofit + RxJava中链接请求

我有2个API,我想按顺序请求并将它们的数据存储在SQLite中。 首先,我想向API A发出请求并将其数据存储在SQL表a 。 然后向API B发出请求并将其数据存储在表b并将一些数据存储在表a_b 。 存储在a_b的数据仅来自请求B 我怎么能用RxJava做到这一点。 我在这里读到了关于使用flatMap的地方,就像这样 apiService.A() // store in DB here? How? maybe use map()? .flatMap(modelA -> { // or maybe store modelA in DB here? return apiService.B().map(modelB -> { storeInDB()l // store B here ? return modelB; }); }); 如果我没有使用lambda函数,这看起来就像普通的嵌套调用一样难看。 这是一个更好的方法吗?

如何从Retrofit2获取字符串响应?

我正在做android,寻找一种方法来做一个超级基本的http GET / POST请求。 我一直收到错误: java.lang.IllegalArgumentException: Unable to create converter for class java.lang.String 网络服务: public interface WebService { @GET(“/projects”) Call jquery(); } 然后在我的java中: Retrofit retrofit = new Retrofit.Builder() .baseUrl(“https://jquery.org”) // .addConverterFactory(GsonConverterFactory.create()) .build(); WebService service = retrofit.create(WebService.class); Call signin = service.jquery(); Toast.makeText(this, signin.toString(), Toast.LENGTH_LONG).show(); 我实际上只是尝试使用GET请求查询jquery.org/projects并返回它响应的String。 哪里不对? 如果我尝试实现一个自定义转换器(我在网上find了一些例子),它抱怨我没有实现抽象方法convert(F),这些都没有。 谢谢。

Retrofit 2.0取消Call对象

有没有人玩过Retrofit 2.0 ,特别是Call.cancel()方法? 什么时候触发它的最佳时机? 我已经尝试在Fragment onStop()中调用它,但是在屏幕显示关闭时遇到了一些调用被取消的问题。 此外,我尝试在Fragment onDestroy()中调用它,但此方法不会取消在ViewPager触发的ViewPager (例如在选项卡之间切换) 有没有人有这方面的工作实例? 我试图实现这个我的Loop repo: https : //github.com/lawloretienne/Loop

RxJava + Retrofit – >用于API调用的BaseObservable,用于集中响应处理

我是RxJava的新手所以请原谅我,如果这听起来太新手了:-)。 截至目前,我有一个抽象的CallbackClass,它实现了Retofit Callback。 在那里我捕获了Callback的“onResponse”和“onError”方法,并在最终转发到自定义实现的方法之前处理各种错误types。 我还使用此集中式类来进行请求/响应应用程序日志记录和其他内容。 例如:对于来自我的服务器的特定错误代码,我在响应正文中收到一个新的Auth令牌,刷新令牌,然后clone.enqueue调用。 当然,我的服务器的响应还有其他一些全局行为。 目前的解决方案(没有Rx): public abstract void onResponse(Call call, Response response, boolean isSuccess); public abstract void onFailure(Call call, Response response, Throwable t, boolean isTimeout); @Override public void onResponse(Call call, Response response) { if (_isCanceled) return; if (response != null && !response.isSuccessful()) { if (response.code() == “SomeCode” && retryCount < RETRY_LIMIT) { […]

Kotlin中的Retrofit2 + SimpleXML:MethodException:Annotation必须标记set或get方法

我想从API获取XML数据,并使用Kotlin中的Retrofit2 + SimpleXML将其映射到Kotlin模型对象。 但是,我收到了来自SimpleXML的以下错误消息。 org.simpleframework.xml.core.MethodException:注释@ org.simpleframework.xml.Element(data = false,name =,required = true,type = void)必须标记set或get方法 这是获取的XML数据 Success XXXXXXXXXXXXXXXXXXXX 4294967295 Kotlin模型对象如下 @Root(name = “response”) public class User() { @Element public var result: String? = null @Element public var token: String? = null @Element public var uid: String? = null } 和APIClient如下。 interface MyService { @GET(“/testLogin.xml”) fun getUser(): Call […]

Retrofit和RxJava:如何组合两个请求并获得对这两个结果的访问权限?

我需要提出两个服务请求并将其结合起来: ServiceA()=> [{“id”:1,”name”:”title”},{“id”:1,”name”:”title”}] ServiceB( id )=> {“field”:”value”,”field1″:”value”} 目前,我已设法将结果组合在一起,但我需要将id作为parameter passing给ServiceB并获取对第一个结果的访问权限。 到目前为止我尝试了什么: Retrofit repo = new Retrofit.Builder() .baseUrl(“https://api.themoviedb.org/3/genre/”) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); Observable Genres = repo .create(services.class) .getAllGeneros(“movie”,”list”,”da0d692f7f62a1dc687580f79dc1e6a0″) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()); Observable Movies = repo .create(services.class) .getAllMovies(“28″,”movies”,”da0d692f7f62a1dc687580f79dc1e6a0″,12) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()); Observable combined = Observable.zip(Genres, Movies, new Func2() { @Override public CollectionsMovies call(GenerosResponse generosResponse, ResponseMovies responseMovies) { return new CollectionsMovies(generosResponse, responseMovies); […]