Retrofit2を使用してデータをフェッチしようとしていますが、以下のエラーを示す応答を取得できませんでした。
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 4 column 2 path $
これが私のリクエストURLですhttps://itunes.apple.com/search?term=Michael+jackson&media=musicVideo
以下は私のコードです:
ApiService.class
public interface ApiService {
@POST("search")
Call<List<Video>> getTracks(@Body JsonObject jsonObject);
}
RetrofitClient
public class RetrofitClient {
public static Retrofit retrofit = null;
public static Retrofit getInstance(){
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(22, TimeUnit.SECONDS)
.readTimeout(22, TimeUnit.SECONDS)
.writeTimeout(22, TimeUnit.SECONDS)
.build();
if(retrofit == null)
retrofit = new Retrofit.Builder()
.baseUrl("https://itunes.apple.com/")
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient().create()))
.client(okHttpClient)
.build();
return retrofit;
}
}
Video.java
public class Video {
public int resultCount;
public List<Result> results;
public Video(){}
public Video(int resultCount, List<Result> results) {
this.resultCount = resultCount;
this.results = results;
}
public int getResultCount() {
return resultCount;
}
public void setResultCount(int resultCount) {
this.resultCount = resultCount;
}
public List<Result> getResults() {
return results;
}
public void setResults(List<Result> results) {
this.results = results;
}
}
Result.java
public class Result {
public String wrapperType;
public String kind;
public int artistId;
public int trackId;
public String artistName;
public String trackName;
public String trackCensoredName;
public String artistViewUrl;
public String trackViewUrl;
public String previewUrl;
public String artworkUrl30;
public String artworkUrl60;
public String artworkUrl100;
public double collectionPrice;
public double trackPrice;
public String releaseDate;
public String collectionExplicitness;
public String trackExplicitness;
public int trackTimeMillis;
public String country;
public String currency;
public String primaryGenreName;
public int collectionId;
public String collectionName;
public String collectionCensoredName;
public String collectionViewUrl;
public int discCount;
public int discNumber;
public int trackCount;
public int trackNumber;
public Result(){}
public Result(String wrapperType, String kind, int artistId, int trackId, String artistName, String trackName, String trackCensoredName, String artistViewUrl, String trackViewUrl, String previewUrl, String artworkUrl30, String artworkUrl60, String artworkUrl100, double collectionPrice, double trackPrice, String releaseDate, String collectionExplicitness, String trackExplicitness, int trackTimeMillis, String country, String currency, String primaryGenreName, int collectionId, String collectionName, String collectionCensoredName, String collectionViewUrl, int discCount, int discNumber, int trackCount, int trackNumber) {
this.wrapperType = wrapperType;
this.kind = kind;
this.artistId = artistId;
this.trackId = trackId;
this.artistName = artistName;
this.trackName = trackName;
this.trackCensoredName = trackCensoredName;
this.artistViewUrl = artistViewUrl;
this.trackViewUrl = trackViewUrl;
this.previewUrl = previewUrl;
this.artworkUrl30 = artworkUrl30;
this.artworkUrl60 = artworkUrl60;
this.artworkUrl100 = artworkUrl100;
this.collectionPrice = collectionPrice;
this.trackPrice = trackPrice;
this.releaseDate = releaseDate;
this.collectionExplicitness = collectionExplicitness;
this.trackExplicitness = trackExplicitness;
this.trackTimeMillis = trackTimeMillis;
this.country = country;
this.currency = currency;
this.primaryGenreName = primaryGenreName;
this.collectionId = collectionId;
this.collectionName = collectionName;
this.collectionCensoredName = collectionCensoredName;
this.collectionViewUrl = collectionViewUrl;
this.discCount = discCount;
this.discNumber = discNumber;
this.trackCount = trackCount;
this.trackNumber = trackNumber;
}
public String getWrapperType() {
return wrapperType;
}
public void setWrapperType(String wrapperType) {
this.wrapperType = wrapperType;
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public int getArtistId() {
return artistId;
}
public void setArtistId(int artistId) {
this.artistId = artistId;
}
public int getTrackId() {
return trackId;
}
public void setTrackId(int trackId) {
this.trackId = trackId;
}
public String getArtistName() {
return artistName;
}
public void setArtistName(String artistName) {
this.artistName = artistName;
}
public String getTrackName() {
return trackName;
}
public void setTrackName(String trackName) {
this.trackName = trackName;
}
public String getTrackCensoredName() {
return trackCensoredName;
}
public void setTrackCensoredName(String trackCensoredName) {
this.trackCensoredName = trackCensoredName;
}
public String getArtistViewUrl() {
return artistViewUrl;
}
public void setArtistViewUrl(String artistViewUrl) {
this.artistViewUrl = artistViewUrl;
}
public String getTrackViewUrl() {
return trackViewUrl;
}
public void setTrackViewUrl(String trackViewUrl) {
this.trackViewUrl = trackViewUrl;
}
public String getPreviewUrl() {
return previewUrl;
}
public void setPreviewUrl(String previewUrl) {
this.previewUrl = previewUrl;
}
public String getArtworkUrl30() {
return artworkUrl30;
}
public void setArtworkUrl30(String artworkUrl30) {
this.artworkUrl30 = artworkUrl30;
}
public String getArtworkUrl60() {
return artworkUrl60;
}
public void setArtworkUrl60(String artworkUrl60) {
this.artworkUrl60 = artworkUrl60;
}
public String getArtworkUrl100() {
return artworkUrl100;
}
public void setArtworkUrl100(String artworkUrl100) {
this.artworkUrl100 = artworkUrl100;
}
public double getCollectionPrice() {
return collectionPrice;
}
public void setCollectionPrice(double collectionPrice) {
this.collectionPrice = collectionPrice;
}
public double getTrackPrice() {
return trackPrice;
}
public void setTrackPrice(double trackPrice) {
this.trackPrice = trackPrice;
}
public String getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
public String getCollectionExplicitness() {
return collectionExplicitness;
}
public void setCollectionExplicitness(String collectionExplicitness) {
this.collectionExplicitness = collectionExplicitness;
}
public String getTrackExplicitness() {
return trackExplicitness;
}
public void setTrackExplicitness(String trackExplicitness) {
this.trackExplicitness = trackExplicitness;
}
public int getTrackTimeMillis() {
return trackTimeMillis;
}
public void setTrackTimeMillis(int trackTimeMillis) {
this.trackTimeMillis = trackTimeMillis;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public String getPrimaryGenreName() {
return primaryGenreName;
}
public void setPrimaryGenreName(String primaryGenreName) {
this.primaryGenreName = primaryGenreName;
}
public int getCollectionId() {
return collectionId;
}
public void setCollectionId(int collectionId) {
this.collectionId = collectionId;
}
public String getCollectionName() {
return collectionName;
}
public void setCollectionName(String collectionName) {
this.collectionName = collectionName;
}
public String getCollectionCensoredName() {
return collectionCensoredName;
}
public void setCollectionCensoredName(String collectionCensoredName) {
this.collectionCensoredName = collectionCensoredName;
}
public String getCollectionViewUrl() {
return collectionViewUrl;
}
public void setCollectionViewUrl(String collectionViewUrl) {
this.collectionViewUrl = collectionViewUrl;
}
public int getDiscCount() {
return discCount;
}
public void setDiscCount(int discCount) {
this.discCount = discCount;
}
public int getDiscNumber() {
return discNumber;
}
public void setDiscNumber(int discNumber) {
this.discNumber = discNumber;
}
public int getTrackCount() {
return trackCount;
}
public void setTrackCount(int trackCount) {
this.trackCount = trackCount;
}
public int getTrackNumber() {
return trackNumber;
}
public void setTrackNumber(int trackNumber) {
this.trackNumber = trackNumber;
}
}
VideoFragment.java
private void load(){
Retrofit retrofit = RetrofitClient.getInstance();
ApiService apiService = retrofit.create(ApiService.class);
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("term","Michael+jackson");
jsonObject.addProperty("media","musicVideo");
Call<List<Video>> videoList = apiService.getTracks(jsonObject);
videoList.enqueue(new Callback<List<Video>>() {
@Override
public void onResponse(Call<List<Video>> call, Response<List<Video>> response) {
if(response.body() != null){
Video video = (Video) response.body();
Log.d("list", String.valueOf(video.getResultCount()));
}
}
@Override
public void onFailure(Call<List<Video>> call, Throwable t) {
Log.d("error",t.getMessage());
Toast.makeText(getActivity(),t.getMessage(),Toast.LENGTH_LONG).show();
}
});
}
誰かが私にこのエラーが発生する理由を教えてください。助けていただければ幸いです。
ありがとう
私が理解したように、POSTではなくGETリクエストを行いたいと思います。次に、メソッドを次のように変更します。
@GET("search")
Call<Video> getTracks(@Query("term") String term,
@Query("media") String mediaType);
JSONObjectを作成する必要はなく、検索パラメータを文字列として渡すだけです。
Call<Video> video = apiService.getTracks("Michael+jackson", "musicVideo");
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加