一已旧、思路
ViewModel作為View監(jiān)聽(tīng)器和View進(jìn)行綁定秸苗,LiveData數(shù)據(jù)存放在ViewModel數(shù)據(jù)持久化,并具有觀察性运褪。View通過(guò)監(jiān)聽(tīng)LiveData的數(shù)據(jù)變化惊楼,進(jìn)行相應(yīng)的UI操作玖瘸。
UserRepository作為數(shù)據(jù)來(lái)源層,可以是本地?cái)?shù)據(jù)庫(kù)SqlLite,本地文件檀咙,網(wǎng)絡(luò)數(shù)據(jù)
二雅倒、核心代碼
- 1、ViewModel
package com.example.viewmodel_livedata.viewmodel;
import com.example.viewmodel_livedata.bean.LoginBean;
import com.example.viewmodel_livedata.repository.UserRepository;
import androidx.lifecycle.MediatorLiveData;
import androidx.lifecycle.ViewModel;
public class UserViewModel extends ViewModel {
public MediatorLiveData<LoginBean> liveData = new MediatorLiveData<>();
private UserRepository userRepository = new UserRepository();
/**
* 請(qǐng)求登錄
*
* @param userName
* @param pwd
*/
public void requestLogin(String userName, String pwd) {
liveData.setValue(userRepository.execueLogin(userName, pwd));
}
}
- 2弧可、Repository
package com.example.viewmodel_livedata.repository;
import com.example.viewmodel_livedata.bean.LoginBean;
public class UserRepository {
/**
* 模擬 服務(wù)器登錄
* @param userName
* @param pwd
* @return
*/
public LoginBean execueLogin(String userName, String pwd) {
if ("123".equals(userName) && pwd.equals("456")) {
return new LoginBean(200, " 登錄成功");
} else {
return new LoginBean(400, " 登錄失敗");
}
}
}
- 3蔑匣、View
package com.example.viewmodel_livedata;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.example.viewmodel_livedata.bean.LoginBean;
import com.example.viewmodel_livedata.viewmodel.UserViewModel;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
public class MainActivity extends AppCompatActivity {
private UserViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = ViewModelProviders.of(this).get(UserViewModel.class);
viewModel.liveData.observe(this, new Observer<LoginBean>() {
@Override
public void onChanged(LoginBean loginBean) {
Toast.makeText(MainActivity.this, loginBean.toString(), Toast.LENGTH_LONG).show();
}
});
}
public void login(View view) {
viewModel.requestLogin("123","4567");
}
}