【问题标题】:Using Retrofit to Access an API with key/id使用 Retrofit 访问带有 key/id 的 API
【发布时间】:2014-11-22 03:28:15
【问题描述】:

我还没有真正找到关于此的明确文档,但我想知道是否有人可以指出我使用 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();

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

【问题讨论】:

标签: android json retrofit


【解决方案1】:

要发送 ID 和密钥,您需要修改 HTTP 标头。看来您可以使用 Retrofit 中的 @Header annotation 来做到这一点。

【讨论】:

  • 谢谢,在查看了该注释后,我实际上最终使用了标头构建器。
【解决方案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);

【讨论】:

  • 基于文档,这就像在接口中使用@Query("apiKey") String apiKey,作为方法的参数。
猜你喜欢
  • 2018-07-16
  • 1970-01-01
  • 2014-08-07
  • 2023-03-22
  • 2019-01-16
  • 2011-10-23
  • 1970-01-01
  • 2014-03-15
  • 2012-06-12
相关资源
最近更新 更多