반응형
주소 : http://stbaeya.com/tc/219
안드로이드에서는 웹상의 이미지를 자바의 입출력 메소드를 통해 쉽게 볼수 있고, 저장할 수 있다.
지난번 .txt 파일처럼 모든 파일들은 /data/data/패키지명/files/ 정해진 디렉토리로 정해져 있으며
임의 경로의 파일들은 맘대로 열수가 없다.
우선 프로젝트 생성하고, 매니페스트 파일로 가서 Pemmission을 몇개 추가해준다.
일단, 웹 링크의 이미지를 안드로이드에서 보여주는 메소드를 짜보자.
URL 주소를 통해 연결을 하고, BufferedInputStream 으로 입력을 받는다.
다시 버퍼들을 읽어 들여서 Bitmap 을 생성한다.
위에서 생성된 Bitmap 을 ImageView 에 setImageBitmap() 메소드를 통해 갖다 붙이면 된다.
난 늠른한 조지 워싱턴호의 이미지를 웹에서 퍼왔다.
다시, 웹에서 받은 이미지를 같은 방식으로 파일로 저장을 해보자.
EditText로 입력받은 파일명으로 File을 생성하고, 다운받을 웹상의 URL을 연결 후 읽어들인다.
읽어들인 버퍼들은 File을 오픈시킨후, byte단위로 쓰게된다.
이클립스 에뮬레이터의 File Explorer 로 가면 이미지가 제대로 저장되었는지 확인할 수 있다.
제대로 ImageView에서 확인가능 하다면, 이미지 파일들의 리스트를 만들어보자.
파일 목록 버튼을 클릭했을때, 에뮬레이터의 모든 파일들을 검색하고... 검색된 파일명들을 arrayList 형태로
담아서 ListView에 뿌릴 수 있게 한다.
간단하게 arrayAdapter 로 붙이면 된다.
리스트를 클릭했을때의 액션도 추가해준다.
차후에 삭제를 위해서 mCurrentId 라는 전역변수에 리스트가 클릭되었을때의 position값을 저장해두자.
삭제 모듈까지 작성하면 간단하게 코딩은 끝난다.
전체코드
import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import org.apache.http.util.ByteArrayBuffer; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class BitmapTestActivity extends Activity { private final String URLPATH = "http://imgnews.naver.com/image/032/2010/11/24/3.jpg"; private final String URLPATH2 = "http://image.asiatoday.co.kr/file/420612(0)-550303_57930.jpg"; private final static String PATH = "/data/data/com.ludvan/files/"; private final static String TAG = "filepath"; ArrayList<String> itemList = new ArrayList<String>(); ArrayAdapter<String> adapter; Bitmap bm; EditText edit, editSave; Toast toast; ListView list; ImageView imgView; int mCurrentId; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn1 = (Button) findViewById(R.id.Button01); Button btn2 = (Button) findViewById(R.id.Button02); Button btn3 = (Button) findViewById(R.id.Button03); btn1.setOnClickListener(mClickListener); btn2.setOnClickListener(mClickListener); btn3.setOnClickListener(mClickListener); editSave = (EditText) findViewById(R.id.EditText01); imgView = (ImageView) findViewById(R.id.ImageView01); ViewFromUrl(URLPATH); imgView.setImageBitmap(bm); list = (ListView) findViewById(R.id.list); adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_row, R.id.text01, itemList); list.setAdapter(adapter); list.setOnItemClickListener(listViewListener); }// main Button.OnClickListener mClickListener = new Button.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.Button01: String saveName = editSave.getText().toString(); DownloadFromUrl(URLPATH2, saveName); break; case R.id.Button02: onDelete(itemList.get(mCurrentId)); itemList.remove(mCurrentId); adapter.notifyDataSetChanged(); break; case R.id.Button03: onSearching(PATH); adapter.notifyDataSetChanged(); break; default: break; } } };// btnListener AdapterView.OnItemClickListener listViewListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long ID) { String imgPath = PATH + itemList.get(position); bm = BitmapFactory.decodeFile(imgPath); imgView.setImageBitmap(bm); mCurrentId = (int) ID; showToast(Integer.toString(mCurrentId)); } };// listViewListener private void onDelete(String mes) { File file = new File(PATH); File[] fList = file.listFiles(); int count = 0; for (int i = 0; i < fList.length; i++) { String fileName = fList[i].getName(); if (fileName.equals(mes)) { count++; fList[i].delete(); String okmes = "지우기 성공"; showToast(okmes); } } if (count < 1) { String errormes = "잘못된 파일 이름 입니다."; showToast(errormes); } }// Delete private void ViewFromUrl(String urlPath) { try { URL url = new URL(urlPath); URLConnection conn = url.openConnection(); conn.connect(); BufferedInputStream bis = new BufferedInputStream(conn .getInputStream(), 512 * 1024); bm = BitmapFactory.decodeStream(bis); bis.close(); } catch (Exception e) { } }// viewFromUrl private void DownloadFromUrl(String urlPath, String saveName) { String fileName = saveName + ".jpg"; try { File file = new File(fileName); URL url = new URL(urlPath); URLConnection conn = url.openConnection(); conn.connect(); InputStream is = conn.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayBuffer baf = new ByteArrayBuffer(50); int current = 0; while ((current = bis.read()) != -1) { baf.append((byte) current); } FileOutputStream fos = openFileOutput(fileName, 0); fos.write(baf.toByteArray()); fos.close(); } catch (Exception e) { } }// downloadfromUrl private boolean DownloadImage(String Url, String FileName) { URL imageurl; int Read; try { imageurl = new URL(Url); HttpURLConnection conn = (HttpURLConnection) imageurl .openConnection(); int len = conn.getContentLength(); byte[] raster = new byte[len]; InputStream is = conn.getInputStream(); FileOutputStream fos = openFileOutput(FileName, 0); for (;;) { Read = is.read(raster); if (Read <= 0) { break; } fos.write(raster, 0, Read); } is.close(); fos.close(); conn.disconnect(); } catch (Exception e) { return false; } return true; } private void onSearching(String mes) { itemList.clear(); File f = new File(mes); File[] fList = f.listFiles(); if (fList != null) { int count = fList.length; for (int i = 0; i < fList.length; i++) { String fileName = fList[i].getName(); itemList.add(fileName); } String countMes = Integer.toString(count); Toast.makeText(getApplicationContext(), "총 " + countMes + " 개 파일 찾았음.", Toast.LENGTH_SHORT).show(); } }// Search private void showToast(String mes) { toast.makeText(getApplicationContext(), mes, Toast.LENGTH_SHORT).show(); }// showToast }
반응형
'프로그래밍 정리 > 안드로이드' 카테고리의 다른 글
안드로이드에서 파일 받을 때 프로그래스바로 진행상태 보여주는 방법 소스 코드 (0) | 2012.06.12 |
---|---|
[안드로이드, ios 기타 등등] Mirwing Blog Android? iOS? Google? Apple? C? Java? Go? Python? Etc....ioi (0) | 2012.06.12 |
Android HTTP (0) | 2012.06.12 |
안드로이드 apk 자동설치 (0) | 2012.06.12 |
서버에서 apk 파일을 받아와 자동 설치 하는 방법? (0) | 2012.06.12 |