android - 具有改造功能的Android中的YouTube数据API

标签 android json api youtube retrofit

我在Android应用程序中使用Youtube数据API V3。我还使用Retrofit向API发出请求。我可以与服务器通信,但收到的响应无法解析。

public interface APIService {

    //////////////////////// Auth ///////////////////
    @GET("/youtube/v3/search")
    Call<JSONObject> getYoutbeFeeds(@Query("key") String developerKey, @Query("channelId") String channelId,@Query("part") String id,@Query("alt") String alt);
    /////////////////////////////////////////////
}

我调用Youtube API的片段
public class YoutubeFeedsFragment extends BaseFragment{

private APIService apiService = APIClient.getAPIService(Constants.YOUTUBE_FEEDS_URL);;


@Override
public void onStart() {
    super.onStart();
    Call<JSONObject> callBack = apiService.getYoutbeFeeds(Constants.DEVELOPER_KEY,Constants.CHANNEL_ID,"id","json");
    Log.i("data", "service called");
    Log.i("data", callBack.toString());
    callBack.enqueue(new retrofit.Callback<JSONObject>() {
        @Override
        public void onResponse(Response<JSONObject> response) {
            if(response.body() != null) {
                Log.i("data", "not null");

            }
            Log.i("data",response.data());

        @Override
        public void onFailure(Throwable t) {
            Toast.makeText(getActivity(),"sorry connection problem",Toast.LENGTH_LONG).show();
            }
        });
    }
}

常量类
public class Constants {
    public static final String CHANNEL_ID = "XXXXXXXXXXXXXXXXX";
    public static final String DEVELOPER_KEY = "AAAAAAAAAAAAAAAAAAAAA";

    public static String YOUTUBE_FEEDS_URL = "https://www.googleapis.com";
}

API客户端构建URL
public class APIClient {
    public static APIService getAPIService(String baseUrl) {

    OkHttpClient client = new OkHttpClient();
    client.interceptors().add(new LoggingInterceptor());

    if (apiService == null) {
        Retrofit restAdapter = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build();

        apiService = restAdapter.create(APIService.class);
    }
    return apiService;
}

我得到的响应为null。当我从Postman(REST API)发出GET请求时,我正在获取JSON。请告诉我如何使用改造功能解析Android中的Youtube Data API响应。

提前致谢

最佳答案

您使用的.addConverterFactory(GsonConverterFactory.create())不会返回JSONObject,而是已解析的json(通过Gson转换器)。
例如,如果您的json必须返回类似以下内容的内容:

{
  result: "searchResult"
}

然后,您将创建一个类Result,如下所示:
public class Result {

  @SerializedName("result")
  private String result;

  public String getResult(){
    return result;
  }

  public void setResult(String result) {
    this.result = result;
  }
}

并且您的ApiService将如下所示:
public interface APIService {

    //////////////////////// Auth ///////////////////
    @GET("/youtube/v3/search")
    Call<Result> getYoutbeFeeds(@Query("key") String developerKey, @Query("channelId") String channelId,@Query("part") String id,@Query("alt") String alt);
    /////////////////////////////////////////////
}

关于android - 具有改造功能的Android中的YouTube数据API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34566827/

相关文章:

android - 我可以更改 map 叠加层中的点在 map 上绘制的顺序吗

android - [Android][XML]错误 :(19, 31) 找不到与给定名称匹配的资源。(layout_above)

javascript - 如何在 React post 方法调用中传递带有表示数字数据类型的值的 json 属性

javascript - 如何将列表与新的 api 调用结果交换?

php - 在我的网页上用PHP显示API结果

android - 如何在 Kotlin 中绘制可绘制对象?

java - Mockito、验证和 HashMap : Argument(s) are different

json - Grails-将JSONObject保存到MongoDB时出错

json - 关于 swift 解析 JSON

api - 与我的 Web 应用程序的免费 SMS API 集成