(1편)회원가입->로그인(중복체크)->공지사항->강의 목록->시간표 추가 및 중복체크->시간표 조회
(2편)시간표 삭제->강의 경쟁률, 학점 제한
(3편)강의 인기 순위 리스트->어플리케이션 정보->개인정보 암호화-> 어플 개발
오늘은 (1편) 회원가입부터 시간표 조회까지 공부한 내용을 정리해서 올리겠다!!
모든 코드를 여기에 적기보다 일부 코드만 골라서 기록할 예정이고, 최대한 간단하게 설명할 예정.
완벽한 코드는 깃허브에 ~❤
1. 로그인 LoginActivity.java
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String userID=idText.getText().toString();
String userPassword=passwordText.getText().toString();
ㅜ
Response.Listener<String> responseListener=new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try{
JSONObject jsonResponse=new JSONObject(response);
boolean success=jsonResponse.getBoolean("success");
if(success){
AlertDialog.Builder builder=new AlertDialog.Builder(LoginActivity.this);
dialog=builder.setMessage("로그인에 성공했습니다.")
.setPositiveButton("확인",null)
.create();
dialog.show();
Intent intent=new Intent(LoginActivity.this,MainActivity.class);
//user id에대한 정보를 보내줌,
intent.putExtra("userID",userID);
LoginActivity.this.startActivity(intent);
finish();
}
else{
AlertDialog.Builder builder=new AlertDialog.Builder(LoginActivity.this);
dialog=builder.setMessage("로그인에 실패했습니다. 다시 시도해주세요")
.setNegativeButton("다시시도",null)
.create();
dialog.show();
}
}catch (Exception e){
e.printStackTrace();
}
}
};
LoginRequest loginRequest=new LoginRequest(userID,userPassword,responseListener);
RequestQueue queue= Volley.newRequestQueue(LoginActivity.this);
queue.add(loginRequest);
}
});
로그인 버튼 눌렀을 때 userID,userPassword에 담아주고 결과를 받아오기 위해서 JSONObject로 php파일과 연동해준다.
로그인에 성공하면 MainActivity로 넘어간다. (공지사항부분으로)
Volley 라이브러리 이용한다. 이때 volley란 HTTP 라이브러리이고 앱에서 서버와 http 통신을 할 때 HttpURLConnection을 사용하면 직접 요청과 응답을 받는 것이 가능하다.
2.회원가입
final Button validateButton =(Button)findViewById(R.id.validateButton);
validateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Toast.makeText(RegisterActivity.this,"ok",Toast.LENGTH_SHORT).show();
String userID=idText.getText().toString();
if(validate){
return; //ok
}
if(userID.equals("")){
AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this);
dialog=builder.setMessage("아이디는 빈 칸일 수 없습니다.")
.setPositiveButton("확인",null)
.create();
dialog.show();
return;
}
//중복체크
Response.Listener<String> responseListener = new Response.Listener<String>(){
@Override
public void onResponse(String response) {
try{
Toast.makeText(RegisterActivity.this, response, Toast.LENGTH_LONG).show();
JSONObject jsonResponse = new JSONObject(response);
boolean success = jsonResponse.getBoolean("success");
if(success){//사용할 수 있는 아이디라면
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("사용가능한 아이디입니다.")
.setPositiveButton("확인", null)
.create();
dialog.show();
idText.setEnabled(false);//아이디값을 바꿀 수 없도록 함
validate = true;//검증완료
idText.setBackgroundColor(getResources().getColor(R.color.colorGray));
validateButton.setBackgroundColor(getResources().getColor(R.color.colorGray));
}else{//사용할 수 없는 아이디라면
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("이미 존재하는 아이디 입니다.")
.setNegativeButton("확인", null)
.create();
dialog.show();
}
}
catch(Exception e){
e.printStackTrace();
}
}
};//Response.Listener 완료
//Volley 라이브러리를 이용해서 실제 서버와 통신을 구현하는 부분
ValidateRequest validateRequest = new ValidateRequest(userID, responseListener);
RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
queue.add(validateRequest);
}
});
Button registerButton=(Button) findViewById(R.id.registerButton);
registerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String userID=idText.getText().toString();
String userPassword=passwordText.getText().toString();
String userMajor=spinner.getSelectedItem().toString();
String userEmail=emailText.getText().toString();
if(!validate){
AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this);
dialog=builder.setMessage("먼저 중복 체크를 해 주세요")
.setPositiveButton("확인",null)
.create();
dialog.show();
return;
}
if(userID.equals("")||userPassword.equals("")||userMajor.equals("")||userEmail.equals("")){
AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this);
dialog=builder.setMessage("빈칸없이 입력해주세요")
.setPositiveButton("확인",null)
.create();
dialog.show();
return;
}
Response.Listener<String>responseListener=new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try{
JSONObject jsonResponse=new JSONObject(response);
boolean success=jsonResponse.getBoolean("success");
if(success){
AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this);
dialog=builder.setMessage("회원등록에 성공하였습니다")
.setPositiveButton("확인",null)
.create();
dialog.show();
finish();
}
else{
AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this);
dialog=builder.setMessage("회원등록에 실패했습니다.")
.setNegativeButton("확인",null)
.create();
dialog.show();
}
}
회원가입 버튼 누르면 빈칸 입력 안되게 다이아로그로 띄어주고 중복체크 해준다. 자세한건 주석확인 ㄱ ㄱ
(너무길어서 생략한 부분: 초기화, 스피너,catch(), registerRequest 선언부분 등 깃허브에 자세한 코드 있음.)
3.notice 공지사항 (notice.java¬iceListAdapter&MainActivity.java)
3-1. notice안에는 String notice, String name, String date; 선언-> getter&setter ,constuctor 해줌
3-2. MainActivity는 강의 목록 클릭시, 시간표 클릭시, 강의 분석 클릭시 fragment해주는 부분과 색상 변경부분이다.
courseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
notice.setVisibility(View.GONE); //공지사항 notice가 보이지 않도록하는 (화면 바꾸는)
courseButton.setBackgroundColor(getResources().getColor(com.google.android.material.R.color.design_default_color_primary_dark));
statisticsButton.setBackgroundColor(getResources().getColor(com.google.android.material.R.color.design_default_color_primary));
scheduleButton.setBackgroundColor(getResources().getColor(com.google.android.material.R.color.design_default_color_primary));
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment, new CourseFragment());
fragmentTransaction.commit();
}
});
statisticsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
notice.setVisibility(View.GONE); //공지사항 notice가 보이지 않도록하는 (화면 바꾸는)
courseButton.setBackgroundColor(getResources().getColor(com.google.android.material.R.color.design_default_color_primary));
statisticsButton.setBackgroundColor(getResources().getColor(com.google.android.material.R.color.design_default_color_primary_dark));
scheduleButton.setBackgroundColor(getResources().getColor(com.google.android.material.R.color.design_default_color_primary));
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment, new StatisticsFragment());
fragmentTransaction.commit();
}
});
scheduleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
notice.setVisibility(View.GONE); //공지사항 notice가 보이지 않도록하는 (화면 바꾸는)
courseButton.setBackgroundColor(getResources().getColor(com.google.android.material.R.color.design_default_color_primary));
statisticsButton.setBackgroundColor(getResources().getColor(com.google.android.material.R.color.design_default_color_primary));
scheduleButton.setBackgroundColor(getResources().getColor(com.google.android.material.R.color.design_default_color_primary_dark));
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment, new ScheduleFragment());
fragmentTransaction.commit();
}
});
3-3. noticeListAdapter
BaseAdapter 상속해줌. (자세한 코드는 깃허브참조)
4.Course 강의 목록 보여주기
마찬가지로 Course, CourseFragment,CourseListAdapter.java
강의 목록 보여줌 -> 추가 버튼 생성해서 강의를 추가할 수 있게하며 또한 강의 시간 중복을 방지하였음.
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean validate =false; //현재 강의를 추가할수잇는지없는지
validate=schedule.validate(courseList.get(i).getCourseTime());
//현재 추가하려는 강의에 시간표를 넣음으로서 타당성을 검증함.
//String userID = MainActivity.userID; //회원아이디 가져옴
if(!alreadyln(courseIDList,courseList.get(i).getCourseID())){
//내가 신청했던 강의 아이디속에서 현재 신청하려는 강의 아이디가 포함되어있다면?
AlertDialog.Builder builder=new AlertDialog.Builder(parent.getActivity());
AlertDialog dialog=builder.setMessage("이미 추가한 강의입니다.")
.setPositiveButton("다시시도",null)
.create();
dialog.show();
}
else if(validate==false){
AlertDialog.Builder builder=new AlertDialog.Builder(parent.getActivity());
AlertDialog dialog=builder.setMessage("시간표가 중복됩니다.")
.setNegativeButton("다시시도",null)
.create();
dialog.show();
}
else{
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonResponse = new JSONObject(response);
boolean success = jsonResponse.getBoolean("success");
if (success) {
AlertDialog.Builder builder = new AlertDialog.Builder(parent.getActivity());
AlertDialog dialog = builder.setMessage("강의가 추가되었습니다.")
.setPositiveButton("확인", null)
.create();
dialog.show();
//강의 직접 추가하기 해당 강의 번호 등록.
courseIDList.add(courseList.get(i).getCourseID());
schedule.addSchedule(courseList.get(i).getCourseTime());
}
else {
AlertDialog.Builder builder = new AlertDialog.Builder(parent.getActivity());
AlertDialog dialog = builder.setMessage("강의추가에 실패했습니다.")
.setNegativeButton("확인", null)
.create();
dialog.show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
AddRequest addRequest= new AddRequest(userID, courseList.get(i).getCourseID()+"", responseListener);
RequestQueue queue = Volley.newRequestQueue(parent.getActivity());
queue.add(addRequest);
}
5. 시간표 조회
시간표 생성하는 방법은 전에 올렸던 블로그 자료에 있습니다. (AutoResizeTextView) ->https://s2jinny.tistory.com/15
TextView 크기 자동 조절 AutoResizeTextView오픈소스 라이브러리
TextView 크기 자동 조절 AutoResizeTextView오픈소스 라이브러리 https://github.com/indrimuska/Kulinaria/blob/master/src/com/indrimuska/kulinaria/AutoResizeTextView.java GitHub - indrimuska/Kulinaria: Kulinaria Android App - Your meal planner t
s2jinny.tistory.com
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
고쳐야 할 점: 타이틀 바 없애고 전체화면 만들기 , ui색상 변경, 크기 맞추기
2편,3편(시간표 삭제->강의 경쟁률, 학점 제한->강의 인기 순위 리스트->스플래시화면) 계속....
php파일 필요하신 분이나 궁금한 사항 댓글 달아주세요 ^_^
'안드로이드 스튜디오' 카테고리의 다른 글
안드로이드 스튜디오 No speakable text present오류 - contentDescription (6) | 2022.12.17 |
---|---|
수강신청 어플 만들기 - Android Studio with JAVA(2) (8) | 2022.12.16 |
안드로이드 스튜디오 WEBVIEW & 하이브리드앱과 네이티브앱 (0) | 2022.12.10 |
TextView 크기 자동 조절 AutoResizeTextView오픈소스 라이브러리 (0) | 2022.12.10 |
안드로이드 onBackPressed() - 두번 뒤로가기 눌러 종료하기 (0) | 2022.12.07 |