Вызов при модификации содержит ошибку Обязательный retrofit2.Call, найдено недействительным - PullRequest
0 голосов
/ 18 мая 2019

Здравствуйте, я недавно запустил retrofit При реализации кода я получаю эту ошибку

Incompatible types. 
Required: retrofit2.Call <java.util.List<com.my.package.Youtube.YoutubePost>>
Found: void

Я пытался получить список воспроизведения канала YouTube, используя Youtube v3 API

Это мой код длятот же

YoutubeActivity

    Retrofit retrofit = new Retrofit.Builder()
            .addConverterFactory(ScalarsConverterFactory.create())
            .baseUrl(AppConstant.API_YT_BASE)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    YoutubeApiInterface youtubeApiInterface = retrofit.create(YoutubeApiInterface.class);

    Call<List<YoutubePost>> call = youtubeApiInterface.getPlayList().enqueue(new Callback<List<YoutubePost>>() {
        @Override
        public void onResponse(Call<List<YoutubePost>> call, Response<List<YoutubePost>> response) {
            if (response.isSuccessful()) {

            } else {

            }
        }

        @Override
        public void onFailure(Call<List<YoutubePost>> call, Throwable t) {
            t.printStackTrace();

        }
    });

YoutubePost

public class YoutubePost implements Parcelable {
    @SerializedName("items")
    private List<YoutubeItems> ytItems = new ArrayList<>();
    private String nextPageToken;

    public List<YoutubeItems> getYtItems() {
        return ytItems;
    }

    public String getNextPageToken() {
        return nextPageToken;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeList(ytItems);
        dest.writeString(nextPageToken);
    }

    protected YoutubePost(Parcel in) {
        ytItems = in.readParcelable(YoutubeItems.class.getClassLoader());
        nextPageToken = in.readString();
    }

    public static final Creator<YoutubePost> CREATOR = new Creator<YoutubePost>() {
        @Override
        public YoutubePost createFromParcel(Parcel source) {
            return new YoutubePost(source);
        }

        @Override
        public YoutubePost[] newArray(int size) {
            return new YoutubePost[size];
        }
    };
}

Снимок экрана с сообщением об ошибке, прикрепленным ниже

enter image description here

1 Ответ

1 голос
/ 18 мая 2019

Я предлагаю вам немного изменить метод getPlayList , чтобы вернуться с помощью Call , а затем разбить строки.Без вашего YoutubeApiInterface это все, что я получил.

Call<List<YoutubePost>> call = youtubeApiInterface.getPlayList();
call.enqueue(new Callback<List<YoutubePost>>() {
        @Override
        public void onResponse(Call<List<YoutubePost>> call, Response<List<YoutubePost>> response) {
            if (response.isSuccessful()) {

            } else {

            }
        }.

        @Override
        public void onFailure(Call<List<YoutubePost>> call, Throwable t) {
            t.printStackTrace();

        }
    });

Таким образом, у вас не будет проблем с типом, потому что сам вызов будет изменен во время постановки в очередь.

...