Класс ресурса и нулевой аргумент - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть изменяемые данные в реальном времени:

private MutableLiveData<Resource<LoginResponse>> loginRequestData = new MutableLiveData<>();

И я использую класс ресурсов, предоставленный Google:

public class Resource<T> {

    @NonNull
    public final Status status;

    @Nullable
    public final T data;

    @Nullable
    public final String message;

    public Resource(@NonNull Status status, @Nullable T data, @Nullable String message) {
        this.status = status;
        this.data = data;
        this.message = message;
    }

    public static <T> Resource<T> success(@NonNull T data) {
        return new Resource<>(Status.SUCCESS, data, null);
    }

    public static <T> Resource<T> error(@NonNull String msg, @Nullable T data) {
        return new Resource<>(Status.ERROR, data, msg);
    }

    public static <T> Resource<T> loading(@Nullable T data) {
        return new Resource<>(Status.LOADING, data, null);
    }

    public enum Status { SUCCESS, ERROR, LOADING}
}

Мой логинОтвет класса:

public class LoginResponse {

    @SerializedName("status")
    @Expose
    private int status;

    @SerializedName("key")
    @Expose
    private String key;

    @SerializedName("anonid")
    @Expose
    private String anonid;

    @SerializedName("username")
    @Expose
    private String username;

    @SerializedName("photo")
    @Expose
    private String photo;

    @SerializedName("isBanned")
    @Expose
    private int isBanned;


    public int getStatus() {
        return status;
    }

    public String getKey() {
        return key;
    }

    public String getAnonid() {
        return anonid;
    }

    public String getUsername() {
        return username;
    }

    public String getPhoto() {
        return photo;
    }

    public int getIsBanned() {
        return isBanned;
    }
}

Как вы предполагаете, я делаю сетевой запрос с этими живыми данными. Перед сетевым запросом я хочу установить его в режим LOADING следующей строкой:

loginRequestData.setValue(Resource.loading(null));

Но я получаю следующую ошибку компилятора:

ошибка: не найден подходящий метод для метода setValue (Resource) LiveData.setValue (Resource) не применяется (аргумент несоответствие; Ресурс не может быть преобразован в Ресурс) метод MutableLiveData.setValue (Resource) не применяется (несоответствие аргумента; ресурс не может быть преобразован в Ресурс)

Почему я не могу передать нулевой аргумент для Resource.loading метода?

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Определенный вами LiveData ожидает экземпляр Resource<LoginResponse>, а не экземпляр Resource<?>, который вы предоставляете.Попробуйте вместо этого:

loginRequestData.setValue(Resource.<LoginResponse>loading(null));

Таким образом, вы убедитесь, что ноль Resource, загружаемый вами с использованием метода loading, имеет тип Resource<LoginResponse>.

0 голосов
/ 15 апреля 2019

Похоже, что нет подходящего конструктора для

new Resource<>(Status.LOADING, data, null);

Проверьте, может ли data быть нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...