我在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/