MVVM登录注册

api接口

@POST("/user/loginjson")
Observable<UserEntity> postLogin(@Body RequestBody requestBody);

@POST("/user/register")
Observable<UserEntity> postRegister(@Body RequestBody requestBody);

@GET("/video/findVideos?currentPage=10&pageSize=10")
Observable<VideoEntity> getVideoData();

model

protected Api api;

public Model() {
   api = RetrofitManager.getRetrofitManager().getRetrofit().create(Api.class);
}

public Observable<UserEntity> postLogin(RequestBody requestBody){
   return api.postLogin(requestBody);
}

public Observable<UserEntity> postRegister(RequestBody requestBody){
   return api.postRegister(requestBody);
}

public Observable<VideoEntity> getVideoData(){
   return api.getVideoData();
}

viewModel

private Model model;
public MutableLiveData<UserEntity> loginLiveData = new MutableLiveData<>();
public MutableLiveData<UserEntity> registerLiveData = new MutableLiveData<>();
public MutableLiveData<VideoEntity> videoLiveData = new MutableLiveData<>();
public ViewModel() {
   model = new Model();
}

public void login(RequestBody requestBody){
   model.postLogin(requestBody)
         .subscribeOn(Schedulers.io())
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe(new Observer<UserEntity>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(UserEntity userEntity) {
               Log.i("TagA",userEntity.getCode()+"");
               loginLiveData.postValue(userEntity);
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
         });
}

public void register(RequestBody requestBody){
   model.postRegister(requestBody)
         .subscribeOn(Schedulers.io())
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe(new Observer<UserEntity>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(UserEntity userEntity) {
               registerLiveData.postValue(userEntity);
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
         });
}

public void getVideo(){
   model.getVideoData()
         .subscribeOn(Schedulers.io())
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe(new Observer<VideoEntity>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(VideoEntity videoEntity) {
               videoLiveData.postValue(videoEntity);
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
         });
}

activity

ActivityLoginBinding loginBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_login);
   loginBinding = DataBindingUtil.setContentView(this,R.layout.activity_login);
   setContentView(loginBinding.getRoot());

   ViewModel viewModel = new ViewModelProvider(this).get(ViewModel.class);
   loginBinding.loginBtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
         String username = loginBinding.account.getText().toString().trim();
         String password = loginBinding.password.getText().toString().trim();
         Map<String,String> map = new HashMap<>();
         map.put("username",username);
         map.put("password",password);

         String json = new Gson().toJson(map);
         RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"),json);
         viewModel.login(requestBody);
         viewModel.loginLiveData.observe(LoginActivity.this, new Observer<UserEntity>() {
            @Override
            public void onChanged(UserEntity userEntity) {
               if (userEntity.getCode() == 200){
                  Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                  Log.i("TagA","登录成功");
                  Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                  startActivity(intent);
               }else {
                  Toast.makeText(LoginActivity.this, "登录失败:"+userEntity.getMessage(), Toast.LENGTH_SHORT).show();
                  Log.i("TagA","登录失败");
               }
            }
         });

      }
   });

   loginBinding.toRegister.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
         Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
         startActivity(intent);
      }
   });

}

ActivityRegisterBinding registerBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   registerBinding = DataBindingUtil.setContentView(this,R.layout.activity_register);
   setContentView(registerBinding.getRoot());
   ViewModel viewModel = new ViewModelProvider(this).get(ViewModel.class);

   registerBinding.loginBtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
         String username = registerBinding.account.getText().toString().trim();
         String password = registerBinding.password.getText().toString().trim();
         String repassword = registerBinding.repassword.getText().toString().trim();
         Map<String,String> map = new HashMap<>();
         map.put("username",username);
         map.put("password",password);
         map.put("repassword",repassword);

         String json = new Gson().toJson(map);
         RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"),json);
         viewModel.register(requestBody);
         viewModel.registerLiveData.observe(RegisterActivity.this, new Observer<UserEntity>() {
            @Override
            public void onChanged(UserEntity userEntity) {
               if (userEntity.getCode() == 200){
                  Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
               }else {
                  Toast.makeText(RegisterActivity.this, "注册失败:"+userEntity.getMessage(), Toast.LENGTH_SHORT).show();
               }
            }
         });
      }
   });

}
ActivityMainBinding mainBinding;
private VideoAdapter videoAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   mainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
   setContentView(mainBinding.getRoot());

   ViewModel viewModel = new ViewModelProvider(this).get(ViewModel.class);

   viewModel.getVideo();
   viewModel.videoLiveData.observe(this, new Observer<VideoEntity>() {
      @Override
      public void onChanged(VideoEntity videoEntity) {
         videoAdapter = new VideoAdapter(R.layout.item_video,videoEntity.getData());
         videoAdapter.notifyDataSetChanged();
         mainBinding.videoRcv.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
         mainBinding.videoRcv.setAdapter(videoAdapter);
      }
   });

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MVVMLight 是针对WPF、Silverlight和Windows Phone等平台的轻量级MVVM框架,提供了一些方便快捷的功能,让开发者可以更加高效地完成项目的开发MVVMLight 的登录功能可以帮助我们快速地实现一个基本的用户登录流程。在 MVVMLight 中,我们可以使用 ViewModelLocator 来获取 ViewModel 的实例,同时也可以通过设置数据绑定的方式来实现视图与 ViewModel 的双向通信。 在实现登录功能时,我们可以设置一个 LoginViewModel,其中包含用户名和密码两个属性,以及登录命令,通过调用登录命令来实现用户登录。我们可以通过各种方式来验证用户输入的用户名和密码是否正确,如果验证通过,则可以进行一些后续操作,比如跳转到主页面等。 在实现MVVMLight登录功能的过程中,我们需要注意的是保护用户数据的安全性,其次是要考虑到用户的体验,简化流程、提高操作效率,在UI设计和交互过程中尽量符合人性化设计,这样才能达到用户在使用时的舒适感和愉悦感。 ### 回答2: MVVMLight是一个轻量级的MVVM框架,它为开发者提供了一些实用的工具和类帮助开发者更加容易地实现MVVM模式的开发MVVMLight提供了许多实用的功能,其中之一就是登录功能。 MVVMLight提供了一个基于Messenger的登录框架,它使得开发者能够更加容易的实现登录功能。实现登录功能的步骤如下: 1.创建一个LoginViewModel类和一个LoginView类。 2.在LoginViewModel类中添加一个LoginCommand命令,该命令将用户输入的用户名和密码发送到服务器验证。 3.在LoginViewModel类中添加一个IsLoggedIn属性,该属性表示用户是否已经登录。 4.在LoginView类中添加一个登录表单,该表单允许用户输入用户名和密码。 5.在LoginView类中将登录表单与LoginCommand命令关联。 6.在LoginViewModel类中订阅一个登录成功的事件,当用户成功登录后,该事件将设置IsLoggedIn属性为true。 7.在LoginView类中订阅IsLoggedIn属性的变化,如果IsLoggedIn属性变为true,则跳转到主页面。 通过以上简单的步骤,就可以实现一个基于MVVMLight的登录功能。MVVMLight提供了非常强大的工具和类,可以让开发者更容易地实现MVVM模式的开发,并且可以轻松实现登录、注册等常见功能。 ### 回答3: MVVMLight是一个MVVM框架,它不仅可以简化开发人员在MVVM架构下的工作,还可以提高代码的可读性和可维护性。在MVVMLight中,我们可以通过使用ViewModelBase类来实现所有的ViewModel,并在其中使用ICommand来处理视图中的事件。这个框架提供了一些预置的命令,如RelayCommand和AsyncRelayCommand,可以减少开发人员的工作量。 在MVVMLight中实现登录可以使用以下步骤: 1. 创建一个ViewModel类,用于处理登录相关的数据和逻辑。在ViewModel中应该包含用户名和密码的属性以及登录命令。 2. 在视图中绑定ViewModel的属性和命令。可以使用MVVMLight提供的RelayCommand预置命令来实现登录按钮的点击事件。当登录命令被触发时,ViewModel中的相应方法将被执行。 3. 登录逻辑应该位于ViewModel中。在登录方法中,我们可以使用提供的API来访问远程服务器获取令牌,并根据令牌的有效性来判断是否登录成功。如果登录成功,可以通过Navigation Service跳转到另一个页面。 4. 在ViewModel中定义一个IsLoggedIn属性,用于存储当前用户是否已登录的状态。当登录成功时,将IsLoggedIn设置为true。在视图中,可以使用数据绑定来更新UI,以反映用户的登录状态。 通过这些简单的步骤,我们可以轻松地实现MVVMLight登录。使用MVVMLight框架的好处是,它提供了许多预置的类和命令,可以大大减少开发工作量。此外,MVVMLight还提供了良好的可扩展性,开发人员可以根据自己的需求进行相应的扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值