复习mvvm前,先复习下DataBinding:
什么是DataBinding? DataBinding是谷歌官方发布的一个数据绑定的框架,它需要Android 2.1和Gradle1.5.0以上版本环境下才能运行,它减少了大量findviewbyid代码,降低了耦合,使项目更清晰简洁!
1.Model:模型层,负责处理数据的加载或者存储
2.View:视图层,负责界面数据的展示,与用户进行交互
3.ViewModel:处理业务逻辑,实现view层和数据的绑定
先将之前的mvp架构的项目改造成mvvm架构的!!
1.建立MvvmViewModel
public class MvvmViewModel {
public final ObservableField<String> result=new ObservableField<String>();
public void getParm(String url,String id){
// 创建OkHttpClient.Builder对象
OkHttpClient.Builder builder = new OkHttpClient().newBuilder() ;
// 设置拦截器
builder.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
// 设置Header
Request newRequest = chain.request().newBuilder()
.removeHeader("User-Agent")
.addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36")
.build() ;
return chain.proceed(newRequest);
}
}) ;
OkHttpClient client = builder.build();
Retrofit retrofit = new Retrofit.Builder()
.client(client)
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
MyService service = retrofit.create(MyService.class);
service.getInfor(id).enqueue(new Callback<InforBean>() {
@Override
public void onResponse(Call<InforBean> call, Response<InforBean> response) {
InforBean inforBean = response.body();
if (inforBean.getCode().equals("200")) {
Log.e("msg", "成功");
result.set(inforBean.getName()+":"+inforBean.getAge());
} else {
Log.e("msg", "失败");
result.set("失败");
}
}
@Override
public void onFailure(Call<InforBean> call, Throwable t) {
t.getStackTrace();
Log.e("msg", "连接失败");
result.set("连接失败");
}
});
}
}
2.修改main_activity.xml
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
<variable
name="viewModel"
type="com.demo.mvvm.MvvmViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context="com.demo.revise.MainActivity"
android:background="#BCD3ED">
<Button
android:layout_marginTop="20dp"
android:layout_width="200dp"
android:layout_height="50dp"
android:id="@+id/bt"
android:text="点击"
android:background="#fff"
/>
<TextView
android:layout_marginTop="50dp"
android:layout_width="200dp"
android:layout_height="200dp"
android:text="@{viewModel.result}"
android:id="@+id/tv"
/>
</LinearLayout>
</layout>
3.建立MvvmActivity
public class MvvmActivity extends AppCompatActivity implements View.OnClickListener{
private MvvmViewModel mvm;
private Button bt;
private String url="xxxxx";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainAvtivityBinding mab= DataBindingUtil.setContentView(this,R.layout.main_avtivity);
mvm=new MvvmViewModel();
mab.setViewModel(mvm);
initView();
initData();
}
private void initData(){
mvm.getParm(url,"1");
}
private void initView(){
bt=findViewById(R.id.bt);
bt.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.bt:
mvm.getParm(url,"2");
break;
default:
break;
}
}
}
至此就实现了mvvm架构模式,对比之前的mvc和mvp,代码量更少,创建的类也是最少的。
上一篇:Android架构模式——mvp