Articles of 改造

使用Retrofit批量请求

我想使用Retrofit执行批量请求。 它有什么好办法,如何实现呢? 基本上我要做的是替换URL的查询部分中的一些字符(仅在URL的路径部分中使用替换块 – 使用@Path注释)。 这是我的问题的伪代码。 @GET(“/v2/multi?requests=/users/self,/venues/search?client_id={client_id}&client_secret={client_secret}&v={v}&ll={ll}&intent={intent}&limit={limit}”) ProfileSearchVenuesResponse searchVenuesAndProfiles(@ReplaceBy(“client_id”) String clientId, @ReplaceBy(“client_secret”) String clientSecret, @ReplaceBy(“v”) int version, @ReplaceBy(“ll”) String location, @ReplaceBy(“intent”) String intent, @ReplaceBy(“limit”) int limit);

通过改造(GSON)将json映射到对象

我从服务器获得的Json是: { “data” : [ { “id”:1, “url”: “http://example.com/image1” }, { “id”:2, “url”: “http://example.com/image2” }, { “id”:3, “url”: “http://example.com/image3” } ] } 我用于映射的类是 public class Repository { private List events; } 虽然我从改造中获得了成功,但我无法将其映射到我的对象。 我还有类id和int url的类Event 。

在Retrofit中序列化查询参数

想象一下以下要求: @POST(“/recipes/create”) void createRecipe(@Query(“recipe”) Recipe recipe, Callback callback); 我想要json(食谱),但不幸的是我的请求只是调用toString()为我的食谱,它根本不起作用。 我可以覆盖Recipe中的toString,但我宁愿有一个通用的解决方案。 我不能使用@Body,因为我需要指定,我要发送的内容(我需要“recipe = json(theRecipe)”)。 我也无法更改序列化以添加“recipe =”,因为我不负责服务器。 目前我正在使用QueryMap Map,我放入了一个序列化对象。 虽然这有效,但在我看来,这不是一个非常好的解决方案。 我可以以某种方式拦截改装适配器吗?

没有类findexceptioncom.squareup.okhttp.logging.HttpLoggingInterceptor

即使在添加依赖项并导入类之后,我也会收到java.lang.NoClassDefFoundError:com.squareup.okhttp.logging.HttpLoggingInterceptor。 有人可以帮忙吗? Gradle构建文件 apply plugin: ‘com.android.application’ android { compileSdkVersion 23 buildToolsVersion “23.0.2” defaultConfig { applicationId “xyz” minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName “1.0” multiDexEnabled = true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } repositories { mavenCentral() } } dependencies { compile fileTree(dir: ‘libs’, include: [‘*.jar’]) testCompile ‘junit:junit:4.12’ compile ‘com.android.support:appcompat-v7:23.1.1’ […]

使用Retrofit时手动解析部分响应

我正在使用一个REST API,它返回一个JSON文档,该文档以如下方式开始,并包含一个带有字符串ID(如“ABC”)的项目的“集合”。 注意“routes”字段,它包含一系列名为“ABC”,“ABD”,“ABE”等的字段,但是路由在json中没有表示为数组,所以所有这些 { “status”:true, “page”:1, “per_page”:500, “total_count”:1234, “total_pages”:8, “total_on_page”:500, “routes”:{ “ABC”:[ { “value”:22313, 我正在使用Retrofit,问题是routes字段不是数组(尽管事实上它确实是这样)并且Retrofit / Gson要求我为具有字段variablesabc,abd等的路由创建模型对象 – 这不是实际的数据变化。 由于各种原因,更改服务器API很难,所以我希望在Android客户端上解决这个问题。 我认为这些是选项: 在它到达Gson之前拦截JSON文档并调整文档,可能使用自定义的Gson解析器,或者拦截HTTP响应。 绕过JSON解析,从Retrofit获取JSON文档(我还没弄清楚如何做到这一点,或者是否可能) 使用我不知道的Retrofit的一些function将字段名称映射到集合。 我很感激帮助,特别是如果有一个快速简便的方法来解决这个问题。

GSON使用Retrofit解析Flickr JSON响应进行解析

我好像有以下问题。 我正在使用改造来获取JSON文件并将其解析为java对象。 我正在考虑的url是: https : //api.flickr.com/services/rest/?method = tvl.photos.search&api_key = 2ef592bfddc86f508550184ec706a2fc&tags=gent&per_page=2&format=json 回复: jsonFlickrApi({“photos”:{“page”:1,”pages”:130008,”perpage”:2,”total”:”260016″,”photo”:[{“id”:”15817874286″,”owner”:”36687364@N07″,”secret”:”e480e6fe0c”,”server”:”7475″,”farm”:8,”title”:”3D visualisatie”,”ispublic”:1,”isfriend”:0,”isfamily”:0},{“id”:”15817785516″,”owner”:”36687364@N07″,”secret”:”132f12dff1″,”server”:”7496″,”farm”:8,”title”:”schetsontwerp”,”ispublic”:1,”isfriend”:0,”isfamily”:0}]},”stat”:”ok”}) 我相信问题在于响应前面的jsonFlickrApi。 执行以下代码时: @GET(“/rest/”) void getPhotos(@Query(“method”) String method,@Query(“api_key”) String apiKey,@Query(“tags”) String tags,@Query(“per_page”)String perPage,@Query(“format”) String format, Callback data); 和 flickerRestAPI.getPhotos(“flickr.photos.search”,”2ef592bfddc86f508550184ec706a2fc”,”gent”,”10″,”json”,new Callback() { @Override public void success(FlickrResult photos, Response response) { Log.i(TAG, ” ” + photos.toString()); } @Override public void failure(RetrofitError error) { Log.e(TAG,”Failed”); Log.e(TAG,” […]

Retrofit(2.0 beta2)Multipart文件上传不起作用

我正在使用Square Retrofit版本2.0 beta2。 我试过按照本教程。 我试图将位图图像上传到服务器,但不知何故代码不起作用。 我已经尝试使用邮递员测试我的服务器,我能够发布照片,甚至能够检索它。 这是我的烧瓶控制器。 @app.route(‘/api/photo/user/’, methods=[“POST”]) def post_user_photo(user_id): app.logger.info(“post_user_photo=> user_id:{}, photo: {}”.format( user_id, request.files[‘photo’].filename, )) user = User.query.get_or_404(user_id) try: user.photo = request.files[‘photo’].read() except Exception as e: app.logger.exception(e) db.session.rollback() raise db.session.commit() return “”, codes.no_content 我用邮递员来测试我的控制器,这是邮递员生成的请求。 POST /api/photo/user/5 HTTP/1.1 Host: blooming-cliffs-9672.herokuapp.com Cache-Control: no-cache Postman-Token: 8117fb79-4781-449d-7d22-237c49b53389 Content-Type: multipart/form-data; boundary=—-WebKitFormBoundary7MA4YWxkTrZu0gW —-WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name=”photo”; filename=”sfsu.jpg” Content-Type: […]

改造@Body在HTTP请求中显示为参数

我之前已成功使用Square的Retrofit进行@GET Web API调用,但是当尝试在@POST调用中将@BODY作为@BODY发送时,在服务器(Rails)上,JSON显示为参数而不是正文请求。 我的理解是@BODY会将该方法参数添加到正文中的请求中。 知道我做错了什么吗? WebApi : @POST(“/api/v1/gear/scans.json”) Response postScans( @Header(HEADER_AUTH) String token, @Body JsonObject scans ); 提出网络请求: RestAdapter restAdapter = new RestAdapter.Builder() .setServer(api_url) .build(); WebApi webApi = restAdapter.create(AssetsWebApi.class); Response response = webApi.postScans(auth_token, valid_json);

改造:如何修复“只允许一个http方法。 发现:得到并得到“?

我有这个结构请求。 请求getTransportByStation完美运行。 但我得到exceptionjava.lang.IllegalArgumentException: TransportWebService.getTransportByRoute: Only one HTTP method is allowed. Found: GET and GET. java.lang.IllegalArgumentException: TransportWebService.getTransportByRoute: Only one HTTP method is allowed. Found: GET and GET. 我find了仅适用于POST和POST的解决方案。 interface TransportWebService { @GET(QUERY_CATEGORY_TRANSPORT + “GetTransportByNextStation/{station}”) Observable getTransportByStation( @Path(“city”) String city, @Path(“station”) String station, @Query(“count”) int count, @Query(“userid”) String userId ); @GET(QUERY_CATEGORY_TRANSPORT + “GetTransportByRoute/{route}”) Observable getTransportByRoute( @Path(“city”) String […]

在Android改造中集成Simple XML转换器时遇到的问题

在为Android改造中集成Simple XML转换器时,我遇到了一些问题。 1)。 在build.gradle中添加“compile(’com.squareup.retrofit:converter-simplexml:1.9.0’)”后,我收到了编译错误。 错误报告:信息:Gradle任务[:app:assembleDebug]警告:调试将忽略依赖关系xpp3:xpp3:1.1.3.3,因为它可能与Android提供的内部版本冲突。 如果出现问题,请使用jarjar重新打包以更改类包警告:依赖xpp3:xpp3:1.1.3.3因发布而被忽略,因为它可能与Android提供的内部版本冲突。 如果有问题,请用jarjar重新打包以更改类包 2)。 我通过提供根类名称在http://pojo.sodhanalibrary.com/Convert的帮助下创建了Java Schemas。 我继续为一个或另一个元素获取InstantiateException或ElementException,并且mazorly retrofit.converter.ConversionException:org.simpleframework.xml.core.ValueRequiredException:无法满足@ org.simpleframework.xml.Element(data = false,name = description字段“description”上的,required = true,type = void)。 许多字段的错误相同。