当前位置: 首页 > 知识库问答 >
问题:

利用参数进行改造和获取

谷梁波
2023-03-14

我正在尝试使用reverfit向Google GeoCode API发送一个请求。服务界面如下所示:

public interface FooService {    
    @GET("/maps/api/geocode/json?address={zipcode}&sensor=false")
    void getPositionByZip(@Path("zipcode") int zipcode, Callback<String> cb);
}

当我调用服务时:

OkHttpClient okHttpClient = new OkHttpClient();

RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(Constants.GOOGLE_GEOCODE_URL).setClient(new OkClient(okHttpClient)).build();

FooService service = restAdapter.create(FooService.class);

service.getPositionByZip(zipCode, new Callback<String>() {
    @Override public void success(String jsonResponse, Response response) {
       ...
    }
@Override public void failure(RetrofitError retrofitError) {
    }
});

我收到以下StackTrace:

06-07 13:18:55.337: E/AndroidRuntime(3756): FATAL EXCEPTION: Retrofit-Idle
06-07 13:18:55.337: E/AndroidRuntime(3756): Process: com.marketplacehomes, PID: 3756
06-07 13:18:55.337: E/AndroidRuntime(3756): java.lang.IllegalArgumentException: FooService.getPositionByZip: URL query string "address={zipcode}&sensor=false" must not have replace block.
06-07 13:18:55.337: E/AndroidRuntime(3756):     at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:120)
06-07 13:18:55.337: E/AndroidRuntime(3756):     at retrofit.RestMethodInfo.parsePath(RestMethodInfo.java:216)
06-07 13:18:55.337: E/AndroidRuntime(3756):     at retrofit.RestMethodInfo.parseMethodAnnotations(RestMethodInfo.java:162)
06-07 13:18:55.337: E/AndroidRuntime(3756):     at 

我从这里获取了大量的代码:http://square.github.io/reverfit/所以我有点不理解这个问题。

想法?

共有1个答案

白成济
2023-03-14

AFAIK,{...}只能用作路径,不能在查询参数中使用。请尝试以下操作:

public interface FooService {    

    @GET("/maps/api/geocode/json?sensor=false")
    void getPositionByZip(@Query("address") String address, Callback<String> cb);
}

如果您有未知量的参数要传递,您可以使用do像这样的操作:

public interface FooService {    

    @GET("/maps/api/geocode/json")
    @FormUrlEncoded
    void getPositionByZip(@FieldMap Map<String, String> params, Callback<String> cb);
}
 类似资料:
  • 如何使用RxJava和Kotlin中的改型创建api调用的泛型类? 我的JAVA实现是:: 首先添加Gradle依赖项:(更新到最新版本(如果可用)) //用于改装 实现“com.squareup.reverfit2:reverfit:2.3.0” 实现“com.squareup.reverfit2:converter-gson:2.3.0” //对于拦截器实现“com.squareup.okht

  • 问题内容: 我正在实现登录功能,并为此使用Post请求,但是我收到错误提示 “ retrofit.RetrofitError:com.squareup.okhttp.internal.http.HttpMethod.METHODS” 下面是我的代码 在它下面的logcat输出。 02-10 13:02:43.846:W / System.err(30684):retrofit.RetrofitEr

  • 我试图使用RxJava和Rome的改型,在你建议使用组件拱之前(在这个机会是不可能的,项目是在和50%和只需要继续与拱清理)。 所以问题是这个。我有一个返回POJO的web服务。类似于这样: null 相互作用者 回调 演示文稿 演示者 查看

  • 问题内容: 我是JSON解析的新手,我使用Square的Retrofit库,遇到了这个问题。 我正在尝试解析此JSON响应: 这是我的模型: … 我的界面: 我的成功方法: 当我将其用于成功方法时,会引发错误 预期为BEGIN_OBJECT,但在第1行column2处为BEGIN_ARRAY 怎么了 问题答案: 现在,您正在解析响应,就好像它是这样格式化的: 异常告诉您,您期望在根目录有一个对象,

  • 问题内容: 我正在使用查询参数来设置Google Maps API所需的值。 问题是我不需要第一个查询参数的符号。 改造产生: 这会在我需要时导致呼叫失败 我该如何解决? 问题答案: 如果指定,则必须使用附加任何内容,产生类似的内容。 如果指定,则第一个必须使用附加,产生类似的内容。 这就是改造的工作方式。 当您指定时,Retrofit认为您已经提供了一些查询参数,并使用附加了 更多 查询参数。

  • 我正在使用Junit4测试外部java类。我想模拟下面的代码行 我试过这样 但我仍然收到了这个错误“java.lang.ExceptionInInitializeError” Java语言lang.ExceptionInInitializerRor在sun。反映GeneratedSerializationConstructorAccessor6。java上的newInstance(未知源)。lan