코딩할 때 항상 흐름을 생각하며 만들기!
ㄷ
package com.example.todo.fragment.user;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.example.todo.R;
import com.example.todo.domain.User;
import com.example.todo.domain.UserOneResult;
import com.example.todo.retrofit.RetrofitClient;
import com.example.todo.retrofit.UserService;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
// 내 정보 조회 부분화면
public class UserInfoFragment extends Fragment {
public static final String TAG = "UserInfoFragment";
private TextView txtInfoId, txtInfoName;
private String loginId;
// 객체를 만들 때 변수가 있어야 하기 때문에 확실하다.
public UserInfoFragment(String loginId) { // 객체 생성시 변수 넣고 생성자로 변수 받기
this.loginId = loginId;
}
// // 사용하기 편하지만 빠트릴 수 있어서 불안전하다.
// public void setLoginId(String loginId) { // 세터메소드를 만들어 변수를 받는다
// this.loginId = loginId;
// }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_user_info, container, false);
// View 참조 가져오기
txtInfoId = view.findViewById(R.id.txtInfoId);
txtInfoName = view.findViewById(R.id.txtInfoName);
// 로그인한 아이디를 통해 사용자 정보 가져오는 요청보내기
RequestGetUser(loginId);
return view;
}
// 서버에 요청하기
private void RequestGetUser(String id) {
UserService userService = RetrofitClient.getUserService();
Call<UserOneResult> call = userService.getUser("one",id);
call.enqueue(new Callback<UserOneResult>() {
@Override
public void onResponse(Call<UserOneResult> call, Response<UserOneResult> response) {
if (!response.isSuccessful()) return;
UserOneResult userOneResult = response.body();
User user = userOneResult.getUser();
showUserInfo(user);
}
@Override
public void onFailure(Call<UserOneResult> call, Throwable t) {
Log.d(TAG, "onFailure 호출됨 : " + t.getMessage());
}
});
}//RequestGetUser
// textview에 문자 넣기
private void showUserInfo(User user) {
String loginId = user.getUserName();
String name = user.getFirstName() + " " + user.getLastName();
txtInfoId.setText(loginId);
txtInfoName.setText(name);
}// showUserInfo
}
package com.example.todo.fragment.user;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import androidx.fragment.app.Fragment;
import com.example.todo.MainActivity;
import com.example.todo.R;
import com.example.todo.domain.User;
import com.example.todo.domain.UserOneResult;
import com.example.todo.domain.UserResult;
import com.example.todo.retrofit.RetrofitClient;
import com.example.todo.retrofit.UserService;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
// 내 정보 수정 부분화면
public class UserModifyFragment extends Fragment {
public static final String TAG = "UserModifyFragment";
private String loginId;
private EditText txtLoginId, txtFirstName, txtLastName;
public UserModifyFragment(String loginId) {
this.loginId = loginId;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_user_modify, container, false);
txtLoginId = view.findViewById(R.id.txtLoginId);
txtFirstName = view.findViewById(R.id.txtFirstName);
txtLastName = view.findViewById(R.id.txtLastName);
Button button = view.findViewById(R.id.btnUserPwdModify);
// 로그인 아이디를 통해 사용자 정보 가져오는 요청보내기
RequestGetUser(loginId);
// 버튼에 클릭 이벤트 등록하기
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String firstName = txtFirstName.getText().toString().trim();
String lastName = txtLastName.getText().toString().trim();
User user = new User();
user.setUserName(loginId);
user.setFirstName(firstName);
user.setLastName(lastName);
requestUpdateUser(user);
}
});
RequestGetUser(loginId);
return view;
} // onCreateView
// 서버에 수정 요청하기
private void requestUpdateUser(User user) {
UserService userService = RetrofitClient.getUserService();
Call<UserResult> call = userService.updateUser("modify",user);
call.enqueue(new Callback<UserResult>() {
@Override
public void onResponse(Call<UserResult> call, Response<UserResult> response) {
if (!response.isSuccessful()) return;
UserResult userResult = response.body();
if (userResult.isSuccess()) {
// 회원정보 수정 성공 시, 회원정보 조회 화면으로 변경하기
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.onFragmentChanged(MainActivity.USER_INFO);
}
}
@Override
public void onFailure(Call<UserResult> call, Throwable t) {
}
});
}// requestUpdateUser
// 서버에서 데이터 요청
private void RequestGetUser(String id) {
UserService userService = RetrofitClient.getUserService();
Call<UserOneResult> call = userService.getUser("one",id);
call.enqueue(new Callback<UserOneResult>() {
@Override
public void onResponse(Call<UserOneResult> call, Response<UserOneResult> response) {
if (!response.isSuccessful()) return;
UserOneResult userOneResult = response.body();
User user = userOneResult.getUser();
showUserInfo(user);
}
@Override
public void onFailure(Call<UserOneResult> call, Throwable t) {
Log.d(TAG, "onFailure 호출됨 : " + t.getMessage());
}
});
}//RequestGetUser
// 받아온 데이터 textview에 출력
private void showUserInfo(User user) {
txtLoginId.setText(user.getUserName());
txtFirstName.setText(user.getFirstName());
txtLastName.setText(user.getLastName());
}// showUserInfo
}
package com.example.todo.fragment.user;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import com.example.todo.MainActivity;
import com.example.todo.R;
import com.example.todo.domain.User;
import com.example.todo.domain.UserOneResult;
import com.example.todo.domain.UserResult;
import com.example.todo.retrofit.RetrofitClient;
import com.example.todo.retrofit.UserService;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
// 비밀번호 수정 부분화면
public class UserPasswordModifyFragment extends Fragment {
public static final String TAG = "UserPasswordModify";
private String loginId;
private EditText txtOldPwd, txtNewPwd, txtNewPwd2;
private TextView tvOldPwdMsg, tvNewPwdMsg;
private Button button;
private boolean isOldPwdOk, isNewPwdOk;
public UserPasswordModifyFragment(String loginId) {
this.loginId = loginId;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_user_password_modify, container, false);
txtOldPwd = view.findViewById(R.id.txtOldPwd);
txtNewPwd = view.findViewById(R.id.txtNewPwd);
txtNewPwd2 = view.findViewById(R.id.txtNewPwd2);
tvOldPwdMsg = view.findViewById(R.id.tvOldPwdMsg);
tvNewPwdMsg = view.findViewById(R.id.tvNewPwdMsg);
button = view.findViewById(R.id.btnUserPwdModify);
button.setEnabled(false);
// 포커스 이벤트 등록하기
txtOldPwd.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) return;
RequestGetUser(loginId);
}// onFocusChange
});
// 확인 란에서 포커스가 사라지면 비밀번호 체크
txtNewPwd2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) return;
String newPwd = txtNewPwd.getText().toString().trim();
String newPwd2 = txtNewPwd2.getText().toString().trim();
if (newPwd.equals(newPwd2)) {
tvNewPwdMsg.setText("새 비밀번호가 일치합니다.");
tvNewPwdMsg.setTextColor(Color.GREEN);
isNewPwdOk = true;
} else {
tvNewPwdMsg.setText("새 비밀번호가 불일치합니다.");
tvNewPwdMsg.setTextColor(Color.RED);
isNewPwdOk = false;
}
showButtonEnable();
}
});
// 버튼에 클릭 이벤트 등록하기
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String password = txtNewPwd.getText().toString().trim();
requestUpdateUserPassword(loginId, password);
}
});
RequestGetUser(loginId);
return view;
} // onCreateView
// 현재 작성한 비밀번호 아이디 값과 함께 변수로 받아 서버에 수정하기
private void requestUpdateUserPassword(String loginId, String password) {
UserService userService = RetrofitClient.getUserService();
Call<UserResult> call = userService.updateUserPassword("password", loginId, password);
call.enqueue(new Callback<UserResult>() {
@Override
public void onResponse(Call<UserResult> call, Response<UserResult> response) {
if (!response.isSuccessful()) return;
UserResult userResult = response.body();
if (userResult.isSuccess()) {
// 비밀번호 변경 성공 시, 회원정보 조회 화면으로 변경하기
// 프래그먼트는 액티비티를 상속받는게 아니라서 그냥 this를 사용할 수 없음
Toast.makeText(getContext(), "비밀번호가 변경되었습니다.", Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<UserResult> call, Throwable t) {
}
});
}// requestUpdateUser
// 현재 사용자 정보 받아오기
private void RequestGetUser(String id) {
UserService userService = RetrofitClient.getUserService();
Call<UserOneResult> call = userService.getUser("one",id);
call.enqueue(new Callback<UserOneResult>() {
@Override
public void onResponse(Call<UserOneResult> call, Response<UserOneResult> response) {
if (!response.isSuccessful()) return;
UserOneResult userOneResult = response.body();
User user = userOneResult.getUser();
String password = user.getPassword();
checkOldPassword(password);
}
@Override
public void onFailure(Call<UserOneResult> call, Throwable t) {
Log.d(TAG, "onFailure 호출됨 : " + t.getMessage());
}
});
}//RequestGetUser
// 현재 비밀번호 체크
private void checkOldPassword(String dbPassword) {
String oldPwd = txtOldPwd.getText().toString().trim();
if (oldPwd.equals(dbPassword)) {
tvOldPwdMsg.setText("비밀번호 일치");
tvOldPwdMsg.setTextColor(Color.GREEN);
isOldPwdOk = true;
} else {
tvOldPwdMsg.setText("비밀번호 불일치");
tvOldPwdMsg.setTextColor(Color.RED);
isOldPwdOk = false;
}
showButtonEnable();
}// checkOldPassword
// 현재 비밀번호와 새 비밀번호체크가 true이면 버튼 활성화
private void showButtonEnable() {
if (isOldPwdOk && isNewPwdOk) {
button.setEnabled(true);
} else {
button.setEnabled(false);
}
}
}