AsyncTask 결과값 리턴 받는 방법
안드로이드 AsyncTask 결과 리턴 받는 방법
저장소를 읽고 쓰려면 다음 권한을 AndroidManifest.xml 파일에 추가해야합니다.
<manifest ...>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
안드로이드 마시멜로우 (api 23)부터는 권한 체크 모듈을 추가해야합니다.
작업실행 후 get()메소드를 사용하면 된다.
String rtnStr=""; try { //파일 1개 일때 처리 FileSearchAsyncTask task = new FileSearchAsyncTask(MainActivity.this); rtnStr = task.execute().get(); Log.d("TAG", "FileSearchAsyncTask rtnStr : [" + rtnStr + "]"); }catch(Exception e){ e.printStackTrace(); return ""; }
public class FileSearchAsyncTask extends AsyncTask<Object, Integer, String> { ProgressDialog asyncDialog; private Context context; public FileSearchAsyncTask(Context context) { this.context = context; } @Override protected void onPreExecute() { //작업시작 super.onPreExecute(); asyncDialog = new ProgressDialog(context, ProgressDialog.THEME_HOLO_DARK); //asyncDialog = new ProgressDialog(context, android.R.style.Theme_Holo); asyncDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //막대형태의 ProgressDialog 스타일 설정 //asyncDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); asyncDialog.setMessage(context.getResources().getString(R.string.txt_39)); asyncDialog.setCancelable(false); asyncDialog.setCanceledOnTouchOutside(false); //ProgressDialog가 진행되는 동안 dialog의 바깥쪽을 눌러 종료하는 것을 금지 // show dialog asyncDialog.show(); } @Override protected String doInBackground(Object... objects) { try { File dir = Environment.getExternalStorageDirectory(); Queue<File> directoryFileList = new LinkedList<>(); ArrayList<File> inFiles = new ArrayList<File>(); String findFileName= ""; directoryFileList.addAll(Arrays.asList(dir.listFiles())); while (!directoryFileList.isEmpty()) { File file = directoryFileList.remove(); if (file.isDirectory()) { directoryFileList.addAll(Arrays.asList(file.listFiles())); } else { if (file.getName().startsWith(BAK_FILE_NAME)) { String tempPath = file.getParent() + File.separator + DB_BAK_FILE_NAME; findFileName = tempPath; break; } } } return findFileName; } catch (Exception e) { e.printStackTrace(); return ""; } } @Override protected void onPostExecute(String marketVersion) { super.onPostExecute(marketVersion); if (asyncDialog != null && asyncDialog.isShowing()) { asyncDialog.dismiss(); } asyncDialog = null; } }