(1편)회원가입->로그인(중복체크)->공지사항->강의 목록->시간표 추가 및 중복체크->시간표 조회
https://s2jinny.tistory.com/17
(2편)시간표 삭제->강의 경쟁률, 학점 제한
https://s2jinny.tistory.com/18
(3편)강의 인기 순위 리스트->어플리케이션 정보->개인정보 암호화-> 어플 개발
오늘은 3-1편 인 강의 인기 순위 리스트 (전체에서 가장 인기 많은 순)을 하겠다.
3편은 나누어서 하는 만큼 코드리뷰로 할 예정 !
완벽한 코드는 깃허브에 업로드 예정입니다.
우선 RankListAdapter.java 코드 설명 자세하게 하겠습니다. 어뎁터의 getView 속 부분을 보면
public View getView(final int i, View view, ViewGroup viewGroup) {
View v=View.inflate(context,R.layout.rank,null);
TextView rankTextView=(TextView)v.findViewById(R.id.rankTextView);
TextView courseGrade =(TextView) v.findViewById(R.id.courseGrade);
TextView courseTitle =(TextView) v.findViewById(R.id.courseTitle);
TextView courseCredit=(TextView)v.findViewById(R.id.courseCredit);
TextView courseDivide =(TextView) v.findViewById(R.id.courseDivide);
TextView coursePersonnel =(TextView) v.findViewById(R.id.coursePersonnel);
TextView courseProfessor =(TextView)v.findViewById(R.id.courseProfessor);
TextView courseTime=(TextView) v.findViewById(R.id.courseTime);
우선 뷰에 rank 레이아웃을 사용한다고 한다. rank 레이아웃을 사용한다는 것이다.(이때 id가 아닌 layout이라는 것에 집중하자.)
랭크 텍스트 뷰? 1위 2위...5위를 나타내는 텍스트 뷰
강의 제목, 학년, 교수명 ,학점 , 분반, 인원제한, 시간대를 써줌.
rankTextView.setText((i+1)+"위");
if(i!=0){ //1위가 아니라면 칼라프라이머리 색상을 갖게 된다.
rankTextView.setBackgroundColor(parent.getResources().getColor(com.google.android.material.R.color.design_default_color_primary));
}
if(courseList.get(i).getCourseGrade().equals("제한없음")||courseList.get(i).getCourseGrade().equals("")){
courseGrade.setText("모든학년");
}
else{
courseGrade.setText(courseList.get(i).getCourseGrade()+"학년");
}
courseTitle.setText(courseList.get(i).getCourseTitle());
courseCredit.setText(courseList.get(i).getCourseCredit()+"학점");
courseDivide.setText(courseList.get(i).getCourseDivide()+"분반");
if(courseList.get(i).getCoursePersonnel()==0){
courseGrade.setText("인원제한없음");
}
else {
coursePersonnel.setText("제한인원: " + courseList.get(i).getCoursePersonnel()+" 명");
}
//만약에 교수 이름이 공백이라면 개인연구를 출력하고
if(courseList.get(i).getCourseProfessor().equals("")){
courseProfessor.setText("개인 연구");
}
else{ //교수이름이 적혀져있으면 그 해당 교수님이름을 불러온다.
courseProfessor.setText(courseList.get(i).getCourseProfessor()+"교수님");
}
courseTime.setText(courseList.get(i).getCourseTime()+"");
v.setTag(courseList.get(i).getCourseID());
return v;
}
}
다음 이어서
rankTextView (순위 적는 부분) 정의해준다. 1위가 아니라면 색상은 컬러 프라이머 색상으로 하고
학년 제목 학점 분반 인원제한 시간대를 해당 학년 제목 학점 분반 인원제한 시간대로 불러온다.
이때 courseList.get(i).getCourse~~() 로 불러오는데 중요한 것은 String 형태라면 뒤에 "" 을 붙여준다.(위 코드 참조)
StatisticsFragment.java 초기화:
private ListView courseListView;
private StatisticsCourseListAdapter adapter;
private List<Course> courseList;
// int totalCredit=0; //해당 학점 수
public static int totalCredit=0; //학점 전체가 공통적으로 사용하기 떄문에
public static TextView credit;
private ArrayAdapter rankAdapter;
private Spinner rankSpinner;
//순위보여주는
private ListView rankListView;
private RankListAdapter rankListAdapter;
private List<Course> rankList;
리스트뷰, 어뎁터연결시켜서 전체 강의 순위를 보여준다.
rankSpinner누르면 setOnItemSeletedListener에서 내가 values->arrays->string-array->itemt에 만들었던 것(전체에서, 여성.남성, 전공, 교양) 이라는 것 고르기
//순위보여주게
rankListView=(ListView)getView().findViewById(R.id.rankListView);
rankList=new ArrayList<Course>();
rankListAdapter=new RankListAdapter(getContext().getApplicationContext(),rankList,this);
rankListView.setAdapter(rankListAdapter);
new ByEntire().execute(); //전체 강의 순위
rankSpinner.setAdapter(rankAdapter);
rankSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if(rankSpinner.getSelectedItem().equals("전체에서")){
}
else if(rankSpinner.getSelectedItem().equals("우리과에서")){
}
else if(rankSpinner.getSelectedItem().equals("남자 선호도")){
}
else if(rankSpinner.getSelectedItem().equals("여자 선호도")){
}
else if(rankSpinner.getSelectedItem().equals("전공 인기도")){
}
else if(rankSpinner.getSelectedItem().equals("교양 인기도")){
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
ByEntire 에 AsyncTask 상속 ( 예전에 올린 블로그 자료 참조)
class ByEntire extends AsyncTask<Void,Void,String>{
String target;
@Override
protected void onPreExecute() {
try{
target="http://***********.ivyro.net/ByEntire.php?userID="+ URLEncoder.encode(MainActivity.userID,"UTF-8");
}catch (Exception e){
e.printStackTrace();
}
}
@Override
protected String doInBackground(Void... voids) {
try {
URL url=new URL(target);
HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
InputStream inputStream=httpURLConnection.getInputStream(); //url에서 가져와서
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream)); //버퍼에 담아서 읽을 수 있도록
String temp;
StringBuilder stringBuilder=new StringBuilder();
while((temp=bufferedReader.readLine())!=null){
stringBuilder.append(temp+"\n");
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return stringBuilder.toString().trim();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
try{
JSONObject jsonObject=new JSONObject(result);
JSONArray jsonArray=jsonObject.getJSONArray("response");
int count=0;
int courseID;
String courseGrade;
String courseTitle;
int courseDivide;
String courseProfessor;
int courseCredit;
String courseTime;
int coursePersonnel;
// int courseRival;
// String noticeContent, noticeName,noticeDate;
while(count<jsonArray.length()){
JSONObject object=jsonArray.getJSONObject(count);
courseID=object.getInt("courseID");
courseGrade=object.getString("courseGrade");
courseTitle=object.getString("courseTitle");
courseDivide=object.getInt("courseDivide");
courseProfessor=object.getString("courseProfessor");
courseCredit=object.getInt("courseCredit");
courseTime=object.getString("courseTime");
coursePersonnel=object.getInt("coursePersonnel");
// courseRival=object.getInt("COUNT(SCHEDULE.courseID)");
// int courseCredit=object.getInt("courseCredit"); //courseCredit에 넣은다음
//totalCredit+=courseCredit; //토털 크리딧에 넣어서 형태체계적으로 바꿔준다.
// courseList.add(new Course(courseID,courseGrade,courseTitle,courseDivide,coursePersonnel,courseRival));
// courseList.add(new Course(courseID,courseTitle,courseDivide,courseGrade,coursePersonnel,courseRival,courseCredit));
rankList.add(new Course( courseID, courseGrade, courseTitle, courseCredit, courseDivide, coursePersonnel, courseTime,courseProfessor));
count++;
}
rankListAdapter.notifyDataSetChanged(); //어뎁터새롭게 갱신
}catch (Exception e){
e.printStackTrace();
}
}
}
Course.java 부분 수정 (이 부분 추가하기 !!)
public Course(int courseID, String courseGrade, String courseTitle, int courseCredit, int courseDivide, int coursePersonnel, String courseTime,String courseProfessor) {
this.courseID = courseID;
this.courseGrade = courseGrade;
this.courseTitle = courseTitle;
this.courseCredit = courseCredit;
this.courseDivide = courseDivide;
this.coursePersonnel = coursePersonnel;
this.courseTime = courseTime;
this.courseProfessor=courseProfessor;
}
ByEntire.php 파일 FileZilla 에 올리고 php파일은 다음과 같다.
<?php
$con = mysqli_connect('', '', '', '');
mysqli_set_charset($con,"utf8");
//가장 많이 선택한 강의를 내림차순으로 다섯개
$result=mysqli_query($con,"SELECT COURSE.courseID,COURSE.courseGrade,COURSE.courseTitle, COURSE.courseProfessor, COURSE.courseCredit,COURSE.courseDivide,COURSE.coursePersonnel,COURSE.courseTime FROM COURSE,SCHEDULE WHERE COURSE.courseID=SCHEDULE.courseID GROUP BY SCHEDULE.courseID ORDER BY COUNT(SCHEDULE.courseID) DESC LIMIT 5");
$response = array();
while($row=mysqli_fetch_array($result)){
array_push($response,array("courseID"=>$row[0],"courseGrade"=>$row[1], "courseTitle"=>$row[2],"courseProfessor"=>$row[3],"courseCredit"=>$row[4],"courseDivide"=>$row[5],"coursePersonnel"=>$row[6],"courseTime"=>$row[7]));
}
echo json_encode(array("response"=>$response),JSON_UNESCAPED_UNICODE); //한글 출력
mysqli_close($con);
?>
-> 자신의 호스팅 주소 구글에 쳐보기 -> 어떤 오류인지 php오류 잡을 수 있다.
php 오류 없고 이제 잘 작동하는지 확인
![]() |
![]() |
![]() |
![]() |
1위 2위 3위 4위 5위까지 인기 순위 나옴.
(3)-1편 끝 !!
너무 졸린 하루~ 내일 다시 3편 마무리 하겠습니다 ^_^
'안드로이드 스튜디오' 카테고리의 다른 글
수강신청 어플 - Android Studio with JAVA (3) 완성 (2) | 2022.12.20 |
---|---|
수강신청 어플 만들기 - Android Studio with JAVA(3)-2 (1) | 2022.12.20 |
안드로이드 스튜디오 No speakable text present오류 - contentDescription (6) | 2022.12.17 |
수강신청 어플 만들기 - Android Studio with JAVA(2) (8) | 2022.12.16 |
수강신청 어플 만들기 - Android Studio with JAVA(1) (2) | 2022.12.11 |