Android架构模式——MVVM

复习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

下一篇:Android之hook框架——Legend学习

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值