본문 바로가기
안드로이드 스튜디오

안드로이드 스튜디오 AsyncTask , URLEncode

by s2jinny 2022. 12. 7.

수강신청 어플 만들면서 배우는 AsyncTask <>에 대해

  
    class BackgroundTask extends AsyncTask<Void, Void, String> {
        String target;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            try {
                target = "http://******.ivyro.net/CourseList.php?courseUniversity="+ URLEncoder.encode(courseUniversity, "UTF-8")+ "&courseYear=" + URLEncoder.encode(yearSpinner.getSelectedItem().toString().substring(0,4), "UTF-8")+ "&courseTerm=" + URLEncoder.encode(termSpinner.getSelectedItem().toString(), "UTF-8") + "&courseArea=" + URLEncoder.encode(areaSpinner.getSelectedItem().toString(), "UTF-8") + "&courseMajor=" + URLEncoder.encode(majorSpinner.getSelectedItem().toString(), "UTF-8");              //  Toast.makeText(getActivity().getApplicationContext(), "ok",Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        protected String doInBackground(Void... voids) {
            try{
                URL url = new URL(target);
                HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                InputStream inputStream = httpURLConnection.getInputStream();
                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) {
           // super.onPostExecute(result);
            try{
                AlertDialog dialog;
                AlertDialog.Builder builder = new AlertDialog.Builder(CourseFragment.this.getContext());
                dialog = builder.setMessage(result)
                        .setPositiveButton("확인", null)
                        .create();
                dialog.show();
               }
               catch(Exection e){
               e.printStackTrace;
               }

먼저 execute로 AsyncTask를 실행시킨다.

new BackgroundTask().execute();

 

onPreExcuted는 실행전에 수행할 것을 적음 .

수강신청 어플 안에서는 mysql 호스팅 링크를 적었다.

 

doInBackground() 에서 HTTPURLConnection 클래스로 링크를 통해 서버와 통신을 하고 Buffer 생성후 데이터를 가져온다.

 

onProgressUpdate() 메소드는 자동 호출되고

 

onPostExecute()는 doInBackground작업이 끝나고 파라미터를 리턴하여 그 result를 다이아로그로 보여주었다.


 

URLEncoder.encode 

예를 들면 더 쉬워서 예를 들어

 

String s = "한글출력";
String tex t= URLEncoder.encode(s, "UTF-8"); 

라고 했을 때

s출력값: %EA%B8%... 

text출력값:  한글출력

 

따라서 URLEncoder.encode(String, "String"); 

첫번째 매개변수는 텍스트

두번째 매개변수는 사용할 문자인코딩