package com.example.myapplication51.mvvm.model; import com.example.myapplication51.mvvm.entity.UserEntity; import com.example.myapplication51.mvvm.http.Api; import com.example.myapplication51.mvvm.http.RetrofitManager; import io.reactivex.Observable; import okhttp3.RequestBody; public class LoginModel { protected Api api; public LoginModel() { api = RetrofitManager.getRetrofitManager().getRetrofit().create(Api.class); } public Observable<UserEntity> getLoginData(RequestBody body){ return api.posLoginData(body); } }
package com.example.myapplication51.mvvm.view; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.example.myapplication51.MainActivity; import com.example.myapplication51.R; import com.example.myapplication51.databinding.ActivityLoginBinding; import com.example.myapplication51.mvvm.entity.UserEntity; import com.example.myapplication51.mvvm.model.LoginModel; import com.example.myapplication51.mvvm.viewmodel.LoginViewModel; import com.google.gson.Gson; import java.util.HashMap; import java.util.Map; import okhttp3.MediaType; import okhttp3.RequestBody; public class LoginActivity extends AppCompatActivity { ActivityLoginBinding mainBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_login); LoginViewModel loginViewModel = new ViewModelProvider(this).get(LoginViewModel.class); mainBinding = ActivityLoginBinding.inflate(getLayoutInflater()); View view = mainBinding.getRoot(); setContentView(view); mainBinding.loginBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String username = mainBinding.editUsername.getText().toString().trim(); String password = mainBinding.editPassword.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); loginViewModel.getLogin(requestBody); } }); loginViewModel.LoginLiveData.observe(this, new Observer<UserEntity>() { @Override public void onChanged(UserEntity userEntity) { if (userEntity.getCode() == 200) { Toast.makeText(LoginActivity.this, "登陆成功", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); }else { Toast.makeText(LoginActivity.this, "登陆失败", Toast.LENGTH_SHORT).show(); } } }); } }
package com.example.myapplication51.mvvm.viewmodel; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.example.myapplication51.mvvm.entity.UserEntity; import com.example.myapplication51.mvvm.model.LoginModel; import com.example.myapplication51.mvvm.model.RegisterModel; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.RequestBody; public class LoginViewModel extends ViewModel { private LoginModel loginModel; public MutableLiveData<UserEntity> LoginLiveData = new MutableLiveData<>(); public LoginViewModel() { loginModel = new LoginModel(); } public void getLogin(RequestBody body){ loginModel.getLoginData(body) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<UserEntity>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(UserEntity userEntity) { LoginLiveData.postValue(userEntity); } @Override public void onError(Throwable e) { mvvmjava } @Override public void onComplete() { } }); } }