수강신청 어플 만들면서 배우는 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");
첫번째 매개변수는 텍스트
두번째 매개변수는 사용할 문자인코딩
'안드로이드 스튜디오' 카테고리의 다른 글
안드로이드 스튜디오 WEBVIEW & 하이브리드앱과 네이티브앱 (0) | 2022.12.10 |
---|---|
TextView 크기 자동 조절 AutoResizeTextView오픈소스 라이브러리 (0) | 2022.12.10 |
안드로이드 onBackPressed() - 두번 뒤로가기 눌러 종료하기 (0) | 2022.12.07 |
안드로이드 스튜디오 onActivityCreated( ) 대체 (0) | 2022.12.07 |
안드로이드 스튜디오 공부하던 중 오류 (php) (0) | 2022.12.07 |