【问题标题】:trying to get results from youtube api via retrofit试图通过改造从 youtube api 获得结果
【发布时间】:2017-05-08 06:56:16
【问题描述】:

获取api接口中定义的请求端点方法

    @GET("youtube/v3/search")
Callback<YoutubeResponse> getYouTubeVideos(@Query("key") String apiKey,
                                       @Query("channelId") String channelId,
                                       @Query("part") String videoPart,
                                       @Query("order") String videoOrder,
                                       @Query("maxResults") int maxResults,
                                       Callback<ChannelListResponse> callback);

方法调用得到结果:

Callback <YoutubeResponse> call = apiService.getYouTubeVideos(API_KEY,
             "UCjXfkj5iapKHJrhYfAF9ZGg", "snippet", "date", 20, new Callback<ChannelListResponse>() {
                 @Override
                 public void onResponse(Call<ChannelListResponse> call, Response<ChannelListResponse> response) {
                     Log.v("check", response.body().getEtag() + "check");
                 }

                 @Override
                 public void onFailure(Call<ChannelListResponse> call, Throwable t) {

                 }
             }) ;

我没有通过这个给出非法统计异常的实现获得结果。 存在一些结构性错误,因为日志显示 Unable to create call adapter for retrofit2.Callbackfor method ApiInterface.getYouTubeVideos 使用这些额外的链接来实现相同的。使用此参考链接寻求帮助:YouTube Data API v3 search JSON response retrofit parsing error

但如果将 getYouTubeVideos() 的返回类型保持为 void。然后它说服务方法不能有 void 返回类型。

在这方面的帮助将不胜感激

【问题讨论】:

    标签: android youtube-api retrofit retrofit2


    【解决方案1】:

    请像这样更正 retofit 语法。

    api接口,

     @GET("youtube/v3/search")
            Call<ChannelListResponse> getYouTubeVideos(@Query("key") String apiKey,
                                           @Query("channelId") String channelId,
                                           @Query("part") String videoPart,
                                           @Query("order") String videoOrder,
                                           @Query("maxResults") int maxResults);
    

    方法调用,

    Call<ChannelListResponse> call = apiService.getYouTubeVideos(API_KEY,
                 "UCjXfkj5iapKHJrhYfAF9ZGg", "snippet", "date", 20);
                    call.enqueue(new Callback<ChannelListResponse>() {
                        @Override
                        public void onResponse(Call<ChannelListResponse>call,
    Response<ChannelListResponse> response) {
    
                            Log.d(TAG, "onResponse");
                        }
    
                        @Override
                        public void onFailure(Call<ChannelListResponse>call, Throwable t) {
                            // Log error here since request failed
                            Log.e(TAG, t.toString());
                        }
                    });
    

    【讨论】:

    • 上述语法显示方法调用中的类型不兼容编译时错误:Required Retrofit2.call but found Retrofit2.Callback
    • @Naman 再次检查您的代码,您使用的是 retrofit2.Callback 而不是 retrofit2.Call。
    • 已更正……我的错误……非常感谢……方法已更正。 @GET("youtube/v3/search") Call getYouTubeVideos(@Query("key") String apiKey, @Query("channelId") String channelId, @Query("part") String videoPart, @Query( "order") String videoOrder, @Query("maxResults") int maxResults);但仍然是空指针 bas 请求错误 400 响应代码,response.body() 仍然为空
    • 请求有问题,请检查您的请求参数或参考 youtube 数据 api 的文档。
    • 你好,我也没有得到回应。你有没有找到任何解决方案,我想我已经做好了所有的事情,但没有得到回应,也没有发现任何错误。帮我解决问题。
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 2019-09-15
    • 2019-11-12
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多