android - 使用参数进行改造和 GET

标签 android get retrofit

我正在尝试使用 Retrofit 向 Google GeoCode API 发送请求。服务接口(interface)如下所示:

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) {
    }
});

我收到以下堆栈跟踪:

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 

我查看了 StackOverflow 问题:Retrofit: multiple query parameters in @GET command?但它似乎不适用。

我几乎一字不差地从这里获取了代码:http://square.github.io/retrofit/所以我对理解这个问题有点茫然。

想法?

最佳答案

AFAIK, {...} 只能用作路径,不能在查询参数中使用。试试这个:

public interface FooService {    

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

如果你有未知数量的参数要传递,你可以这样做:

public interface FooService {    

    @GET("/maps/api/geocode/json")
    @FormUrlEncoded
    void getPositionByZip(@FieldMap Map<String, String> params, Callback<String> cb);
}

关于android - 使用参数进行改造和 GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100372/

相关文章:

android - 多个 Realm 的 Realm 唯一约束

android - 这是原始查询的正确方法吗? - 安卓

java - 改造请求为特定数据模型返回 null

android - 通过 Windows 中的 OpenSSL 为我的 Android 应用程序创建带有自签名证书的 PKCS#12 文件

android vs iOS 哪个选择

PHP - 隐藏 url (GET) 参数

google-analytics - 如何使用 GET 变量作为 Google Analytics 中的列?

get - 如何防止在 where 子句中注入(inject) GET 参数

具有本地 LAN IP 的 Android 自签名证书

android - 用于 retrofit 和最新版本 okhttp 的 build.gradle 依赖项