Questions tagged «retrofit»

Retrofit是Square,Inc.针对Android和Java的类型安全REST客户端。

10
Android网络库的比较:OkHTTP,Retrofit和Volley [关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 3年前关闭。 来自学习Android的iOS开发人员的两部分问题,该问题涉及一个Android项目,该项目将提出从JSON到图像到音频和视频流下载的各种请求: 在iOS上,我广泛使用了AFNetworking项目。是否有适用于Android的等效库? 我已经阅读了Square的OkHTTP和Retrofit,以及Volley,但还没有与它们一起开发的经验。我希望有人可以为每个案例提供一些最佳用例的具体示例。根据我的阅读,似乎OkHTTP是这三个中最强大的,并且可以满足该项目的要求(如上所述)。

21
使用翻新2进行记录
我正在尝试获取在请求中发送的确切JSON。这是我的代码: OkHttpClient client = new OkHttpClient(); client.interceptors().add(new Interceptor(){ @Override public com.squareup.okhttp.Response intercept(Chain chain) throws IOException { Request request = chain.request(); Log.e(String.format("\nrequest:\n%s\nheaders:\n%s", request.body().toString(), request.headers())); com.squareup.okhttp.Response response = chain.proceed(request); return response; } }); Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(GsonConverterFactory.create()) .client(client).build(); 但是我只在日志中看到: request: com.squareup.okhttp.RequestBody$1@3ff4074d headers: Content-Type: application/vnd.ll.event.list+json 考虑到删除了Retrofit 1 setLog()以及setLogLevel()我们以前使用的Retrofit 1 ,我应该如何正确记录?

21
如何在翻新请求的正文中发布原始的整个JSON?
可能以前曾问过这个问题,但没有明确回答。如何将原始的整个JSON发布到翻新请求的正文中? 在这里看到类似的问题。还是这个答案正确,它必须是形式url编码并作为字段传递?我真的希望不要,因为我要连接的服务只是在帖子正文中期待原始JSON。它们没有设置为寻找JSON数据的特定字段。 我只想用其余的一劳永逸地澄清一下。一个人回答不使用翻新。另一个不确定语法。另一个人认为是可以的,但前提是它的形式必须经过url编码并放在字段中(在我的情况下这是不可接受的)。不,我无法为我的Android客户端重新编码所有服务。是的,在大型项目中发布原始JSON而不是将JSON内容作为字段属性值传递是很常见的。让我们做对并继续前进。有人可以指出说明该操作的文档或示例吗?或提供一个有效的理由说明为什么/不应该这样做。 更新:我可以100%肯定地说一件事。您可以在Google的Volley中做到这一点。它是内置的。我们可以在翻新中做到这一点吗?

9
什么时候应该使用RxJava Observable,什么时候应该在Android上使用简单的Callback?
我正在为我的应用程序联网。因此,我决定尝试使用Square的Retrofit。我看到他们支持简单Callback @GET("/user/{id}/photo") void getUserPhoto(@Path("id") int id, Callback<Photo> cb); 和RxJava的 Observable @GET("/user/{id}/photo") Observable<Photo> getUserPhoto(@Path("id") int id); 乍一看,两者看起来很相似,但是当涉及到实现时,就会变得很有趣... 虽然使用简单的回调实现看起来类似于: api.getUserPhoto(photoId, new Callback<Photo>() { @Override public void onSuccess() { } }); 这非常简单明了。并Observable很快变得冗长而复杂。 public Observable<Photo> getUserPhoto(final int photoId) { return Observable.create(new Observable.OnSubscribeFunc<Photo>() { @Override public Subscription onSubscribe(Observer<? super Photo> observer) { try { observer.onNext(api.getUserPhoto(photoId)); …

1
改造2-动态网址
使用Retrofit 2,您可以在服务方法的注释中设置完整的URL,例如: public interface APIService { @GET("http://api.mysite.com/user/list") Call<Users> getUsers(); } 但是,在我的应用程序中,我的Web服务的URL在编译时未知,该应用程序在下载的文件中检索它们,因此我想知道如何将Retrofit 2与完整的动态URL结合使用。 我试图设置一个完整的路径,如: public interface APIService { @GET("{fullUrl}") Call<Users> getUsers(@Path("fullUrl") fullUrl); } new Retrofit.Builder() .baseUrl("http://api.mysite.com/") .build() .create(APIService.class) .getUsers("http://api.mysite.com/user/list"); // this url should be dynamic .execute(); 但是在这里,Retrofit并未看到该路径实际上是完整的URL,而是试图下载 http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist 关于如何将Retrofit与此类动态url一起使用的任何提示? 谢谢
181 android  retrofit 

9
如何在翻新库中设置超时?
我在我的应用程序中使用Retrofit库,我想将超时设置为60秒。改装有某种方法可以做到这一点吗? 我以这种方式设置Retrofit: RestAdapter restAdapter = new RestAdapter.Builder() .setServer(BuildConfig.BASE_URL) .setConverter(new GsonConverter(gson)) .build(); 如何设置超时时间?

9
使用翻新功能刷新OAuth令牌,而无需修改所有调用
我们正在Android应用中使用Retrofit,以与OAuth2安全服务器进行通信。一切正常,我们使用RequestInterceptor在每个调用中都包含访问令牌。但是,有时访问令牌将过期,并且令牌需要刷新。当令牌到期时,下一个调用将返回未经授权的HTTP代码,因此易于监视。我们可以通过以下方式修改每个Retrofit调用:在失败回调中,检查错误代码,如果错误代码等于Unauthorized,则刷新OAuth令牌,然后重复Retrofit调用。但是,为此,应修改所有调用,这不是一个易于维护的好的解决方案。有没有一种方法可以修改所有Retrofit调用?

6
脱机时可以使用OKHttp进行改造以使用缓存数据
我正在尝试使用Retrofit和OKHttp来缓存HTTP响应。我遵循了要点,最后得到了以下代码: File httpCacheDirectory = new File(context.getCacheDir(), "responses"); HttpResponseCache httpResponseCache = null; try { httpResponseCache = new HttpResponseCache(httpCacheDirectory, 10 * 1024 * 1024); } catch (IOException e) { Log.e("Retrofit", "Could not create http cache", e); } OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.setResponseCache(httpResponseCache); api = new RestAdapter.Builder() .setEndpoint(API_URL) .setLogLevel(RestAdapter.LogLevel.FULL) .setClient(new OkClient(okHttpClient)) .build() …

10
使用Retrofit 2.0的POST多部分表单数据,包括图像
我正在尝试使用Retrofit 2.0对服务器进行HTTP POST MediaType MEDIA_TYPE_TEXT = MediaType.parse("text/plain"); MediaType MEDIA_TYPE_IMAGE = MediaType.parse("image/*"); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); imageBitmap.compress(Bitmap.CompressFormat.JPEG,90,byteArrayOutputStream); profilePictureByte = byteArrayOutputStream.toByteArray(); Call<APIResults> call = ServiceAPI.updateProfile( RequestBody.create(MEDIA_TYPE_TEXT, emailString), RequestBody.create(MEDIA_TYPE_IMAGE, profilePictureByte)); call.enqueue(); 服务器返回错误,指出文件无效。 这很奇怪,因为我尝试在iOS上以相同的格式上传相同的文件(使用其他库),但是上传成功。 我想知道使用Retrofit 2.0上传图像的正确方法是什么? 上传之前,我应该先将其保存到磁盘吗? PS:我已经对其他不包含图像的Multipart请求进行了改造,并且已成功完成。问题是当我尝试向身体包括一个字节时。

10
无法在Android Retrofit库中为我的班级创建转换器
从使用Volley迁移到Retrofit的过程中,我已经有了之前用于将JSONObject响应转换为实现gson注释的对象的gson类。当我尝试使用改造使http get请求但我的应用程序崩溃时出现以下错误: Unable to start activity ComponentInfo{com.lightbulb.pawesome/com.example.sample.retrofit.SampleActivity}: java.lang.IllegalArgumentException: Unable to create converter for class com.lightbulb.pawesome.model.Pet for method GitHubService.getResponse 我按照改造现场的指南进行操作,并提出了以下实施方案: 这是我尝试执行复古http请求的活动: public class SampleActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sample); Retrofit retrofit = new Retrofit.Builder() .baseUrl("**sample base url here**") .build(); GitHubService service = retrofit.create(GitHubService.class); Call<Pet> callPet …
129 android  gson  retrofit 

9
如何使用Retrofit-Android记录请求和响应正文?
我在Retrofit API中找不到用于记录完整的请求/响应正文的相关方法。我在Profiler中期待一些帮助(但它仅提供有关响应的元数据)。我尝试在Builder中设置日志级别,但这也无济于事: RestAdapter adapter = (new RestAdapter.Builder()). setEndpoint(baseUrl). setRequestInterceptor(interceptor). setProfiler(profiler). setClient(client). setExecutors(MyApplication.getWebServiceThreadPool()). setLogLevel(LogLevel.FULL). setLog(new RestAdapter.Log() { @Override public void log(String msg) { Log.i(TAG, msg); } }). build(); 编辑:此代码现在正在工作。我不知道为什么它不起作用。可能是因为我使用的是旧版本的改造。

21
Retrofit 2.0如何获得反序列化错误响应
我正在使用Retrofit 2.0.0-beta1。 在测试中,我有另一种情况,并且期望错误HTTP 400 我想要retrofit.Response<MyError> response 但是response.body() == null MyError没有反序列化-我只在这里看到 response.errorBody().string() 但是它没有给我MyError作为对象
128 java  retrofit  retrofit2 

10
使用Retrofit 2向所有请求添加标头
Retrofit 2的文档说: 可以使用OkHttp拦截器指定需要添加到每个请求的标头。 使用以前的版本(以下是相关的质量检查)可以轻松完成此操作。 但是,使用改型2,我找不到类似的东西setRequestInterceptor或setInterceptor方法,其可应用于Retrofit.Builder对象。 此外,它似乎没有RequestInterceptor在OkHttp了。Retrofit的文档向我们介绍了Interceptor,我不太了解如何为此目的使用它。 我怎样才能做到这一点?


1
改造2删除主机名中主机名后面的字符
我正在使用Retrofit访问RESTful API。基本网址是: http://api.example.com/service 这是接口的代码: public interface ExampleService { @Headers("Accept: Application/JSON") @POST("/album/featured-albums") Call<List<Album>> listFeaturedAlbums(); } 这就是我发送请求和接收回复的方式: new AsyncTask<Void, Void, Response<List<Album>>>() { @Override protected Response<List<Album>> doInBackground(Void... params) { Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.example.com/service") .addConverterFactory(GsonConverterFactory.create()) .build(); ExampleService service = retrofit.create(ExampleService.class); try { return service.listFeaturedAlbums().execute(); } catch (IOException e) { e.printStackTrace(); } return …
121 android  retrofit 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.