资源类和空参数

时间:2019-04-15 20:09:42

标签: java android mvvm

我有一个可变的实时数据:

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

我正在使用Google提供的Resource类:

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}
}

我的LoginResponse类:

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方法传递null参数?

2 个答案:

答案 0 :(得分:1)

您定义的LiveData需要一个Resource<LoginResponse>的实例,而不是您提供的Resource<?>的一个实例。尝试以下方法:

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

通过这种方式,请确保使用Resource方法加载的空loading的类型为Resource<LoginResponse>

答案 1 :(得分:0)

好像没有合适的构造函数

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

检查data是否可以为空。