使用Retrofit以密钥/ id访问API

时间:2014-09-27 03:40:12

标签: android json retrofit

我还没有真正找到关于此的明确文档,但我想知道是否有人可以指出我使用Retrofit(或OKHTTP或其他更合适的东西)的东西来拉下来来自API的JSON流,需要API ID和API密钥(例如从终端访问数据:curl -v -H" app_id:appid" -H" app_key:appkey" -X GET" http://data.leafly.com/strains/blue-dream")。

我查看了Square网站上的官方文档,但如果有其他任何内容可以帮助我将数据拉下来那将是非常棒的。

谢谢!


最终答案

RestAdapter.Builder builder= new RestAdapter.Builder()
            .setEndpoint( "http://data.leafly.com/" )
            .setRequestInterceptor(new RequestInterceptor() {
                @Override
                public void intercept(RequestInterceptor.RequestFacade request) {
                    request.addHeader("app_id", "id");
                    request.addHeader("app_key", "key");
                }
            });

    final RestAdapter restAdapter = builder.build();

new Thread( new Runnable() {
        @Override
        public void run() {
            LeaflyService service = restAdapter.create(LeaflyService.class);
            final Strain strain = service.data("blue-dream");

            runOnUiThread( new Runnable() {
                @Override
                public void run() {
                    mText.setText( strain.getDescription() );
                }
            } );
        }
    } ).start();

加上应变模型,只适合数据。

2 个答案:

答案 0 :(得分:4)

要发送ID和密钥,您需要修改HTTP标头。您似乎可以使用Retrofit中的@Header annotation执行此操作。

答案 1 :(得分:2)

上面的答案对我没有用,这是我的解决方案:

    RestAdapter.Builder adapterBuilder = new RestAdapter.Builder().setLogLevel(RestAdapter.LogLevel.FULL)
            .setEndpoint(BACKEND_URL).setRequestInterceptor(new RequestInterceptor() {
                @Override
                public void intercept(RequestInterceptor.RequestFacade request) {
                    request.addQueryParam("apikey", apiKey);
                }
            });
    service = adapterBuilder.build().create(BackendInterface.class);
@POST("/getall")
void getIdeaList( Callback<GetAllIdeaResponse> callback);