【发布时间】:2021-07-20 14:24:32
【问题描述】:
I/System.out: Failure -> Failed to invoke public androidx.lifecycle.LiveData() with no args
我正在从 API 获取数据。我正在尝试使用 MVVM,我是 MVVM 的新手。所以我从 ViewModel 调用 api 并在方法中返回数据。我正在从我的 MainActivity 中观察该方法。但我不知道为什么会出现以下错误。
改造进入失败回调。但是当我不使用 LiveData 时,它会在成功回调中进行。
I/System.out: Failure -> Failed to invoke public androidx.lifecycle.LiveData() with no args
我的视图模型
public class MainViewModel extends ViewModel {
private ApiInterface apiInterface;
private LiveData < List < Feature >> featuresList;
public MainViewModel() {
apiInterface = ApiClient.getClient().create(ApiInterface.class);
getEqData();
featuresList = new MutableLiveData < > ();
}
public void getEqData() {
apiInterface.getTodos().enqueue(new Callback < EarthquakeData > () {
@Override
public void onResponse(Call < EarthquakeData > call, Response < EarthquakeData > response) {
featuresList = response.body().features;
}
@Override
public void onFailure(Call < EarthquakeData > call, Throwable t) {
System.out.println("Failure -> " + t.getMessage());
}
});
}
public LiveData < List < Feature >> returnEqData() {
return featuresList;
}
}
主要活动
public class MainActivity extends AppCompatActivity {
private static final String TAG = "sagar";
private MainViewModel mainViewModel;
private RecyclerView rvEarthquake;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rvEarthquake = findViewById(R.id.rvEarthquake);
EarthquakeAdapter adapter = new EarthquakeAdapter(this);
rvEarthquake.setLayoutManager(new LinearLayoutManager(this));
rvEarthquake.setAdapter(adapter);
mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
mainViewModel.returnEqData().observe(this, new Observer < List < Feature >> () {
@Override
public void onChanged(List < Feature > features) {
adapter.setData(features);
}
});
}
}
【问题讨论】:
标签: android mvvm retrofit android-livedata mutablelivedata