package com.example.personalwork.fragment.entry
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
import com.example.personalwork.R
import com.example.personalwork.databinding.FragmentEntryBinding
class EntryFragment : Fragment() {
var _binding: FragmentEntryBinding? = null
val binding get() =_binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentEntryBinding.inflate(inflater,container,false)
//init button
init()
//跳转到登录界面
binding.btnLogin.setOnClickListener {
findNavController().navigate(R.id.action_entryFragment_to_loginFragment)
}
//跳转到注册界面
binding.btnRegister.setOnClickListener {
findNavController().navigate(R.id.action_entryFragment_to_registerFragment)
}
return binding.root
}
fun init(){
val btnLogin = binding.btnLogin
val btnRegister = binding.btnRegister
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
package com.example.personalwork.fragment.login
import User
import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import android.widget.Toast.*
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import com.example.personalwork.R
import com.example.personalwork.data.backData.LoginResponse
import com.example.personalwork.data.models.UserData
import com.example.personalwork.databinding.FragmentLoginBinding
import com.example.personalwork.utils.ApiClient
import com.example.personalwork.utils.ApiService
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import retrofit2.Call
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.create
class LoginFragment : Fragment() {
var _binding: FragmentLoginBinding? = null
val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentLoginBinding.inflate(inflater,container,false)
//初始化
init()
return binding.root
}
fun init(){
val editNo = binding.editNo
val editPassword = binding.editPassword
val btnEntry = binding.btnEntry
btnEntry.setOnClickListener {
val noText = editNo.text.toString()
val passwordText = editPassword.text.toString()
Login(noText,passwordText)
}
}
fun Login(noText:String,passwordText:String){
val user = User(noText,passwordText)
lifecycleScope.launch {
try {
val loginResponse = ApiClient.apiService.login(user)
val result = loginResponse.body()?.data
val roleId = result?.user?.roleid
if (result != null){
showMessage("登录成功")
context?.let { saveResultToSharedPreferences(result, it.applicationContext) }
if(roleId == 0){
withContext(Dispatchers.Main){
findNavController().navigate(R.id.action_loginFragment_to_studentListFragment)
}
}else if(roleId == 1){
withContext(Dispatchers.Main){
findNavController().navigate(R.id.action_loginFragment_to_teacherListFragment)
}
}
}else{
showMessage("登录失败")
}
}catch (e:Exception){
e.printStackTrace()
}
}
}
fun saveResultToSharedPreferences(result:UserData ,context: Context){
val sharedPreferences: SharedPreferences = context.getSharedPreferences("User",Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
editor.putInt("userId", result.user.id)
editor.putString("userName",result.user.name)
editor.putInt("userRoleId",result.user.roleid)
editor.apply()
}
fun showMessage(text: String){
Toast.makeText(requireContext(),text, LENGTH_SHORT).show()
}
}