我有一个可变的实时数据:
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参数?
答案 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
是否可以为空。