마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

서버에서 이미지파일 여러개 받아오기

0 추천

지금은 지정된 url 로 이미지를 하나 받아오는데 여러개의 이미지를 받고싶습니다 어떤식으로해야될까요?

소스첨부

public class MainActivity extends Activity {

	String imageUrl = "";
	Bitmap mSaveBm;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		ImageView bmImage = (ImageView) findViewById(R.id.image);
		Button btnSave = (Button) findViewById(R.id.btnSave);
		btnSave.setOnClickListener(btnSaveOnClickListener);

		BitmapFactory.Options bmOptions;
		bmOptions = new BitmapFactory.Options();
		bmOptions.inSampleSize = 1;

		OpenHttpConnection opHttpCon = new OpenHttpConnection();
		opHttpCon.execute(bmImage, imageUrl);
	}

	Button.OnClickListener btnSaveOnClickListener = new Button.OnClickListener() {

		public void onClick(View arg0) {
			OutputStream outStream = null;
			String extStorageDirectory = Environment
					.getExternalStorageDirectory().getAbsolutePath();
			String fpath = extStorageDirectory + "/DCIM/Camera";

			File file = new File(fpath, "123.jpg");
			File file2 = new File(fpath, "456.jpg");

			try {
				Log.i("LSJ", "File Check:" + file.exists());
				if (file.exists() == false) {
					outStream = new FileOutputStream(file);
					mSaveBm.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
					outStream.flush();
					outStream.close();

					Toast.makeText(MainActivity.this, "저장완료", Toast.LENGTH_LONG)

					.show();

					Log.i("LSJ", "File Check:" + "파일없어서 저장완료");
				} else if (file.exists() == true) {
					outStream = new FileOutputStream(file2);
					mSaveBm.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
					outStream.flush();
					outStream.close();

					Toast.makeText(MainActivity.this, "파일이 중복되어 다른이름으로 저장", Toast.LENGTH_LONG)
							.show();

					Log.i("LSJ", "File Check:" + "파일 중복으로 다른이름저장");
				}

			} catch (FileNotFoundException e) {
				e.printStackTrace();
				Toast.makeText(MainActivity.this, e.toString(),
						Toast.LENGTH_LONG).show();
			} catch (IOException e) {
				e.printStackTrace();
				Toast.makeText(MainActivity.this, e.toString(),
						Toast.LENGTH_LONG).show();
			}
		}

	};

	private class OpenHttpConnection extends AsyncTask<Object, Void, Bitmap> {

		private ImageView bmImage;

		@Override
		protected Bitmap doInBackground(Object... params) {
			Bitmap mBitmap = null;
			bmImage = (ImageView) params[0];
			String url = (String) params[1];
			InputStream in = null;
			try {
				in = new java.net.URL(url).openStream();
				mBitmap = BitmapFactory.decodeStream(in);
				in.close();

			} catch (Exception ex) {
				ex.printStackTrace();
			}
			return mBitmap;
		}

		@Override
		protected void onPostExecute(Bitmap bm) {
			super.onPostExecute(bm);
			mSaveBm = bm;
			bmImage.setImageBitmap(bm);
		}
	}
}

 

너무어렵다ㅠ (650 포인트) 님이 2015년 1월 21일 질문

2개의 답변

0 추천
 
채택된 답변
여러 개의 이미지에 대한 각각의 url은 알고 있는 상태인거죠?

그럼 url을 배열에 담고 위에서 url 파라미터 부분을 배열을 넣도록 하고

AsyncTask에서 그 배열을 받아 루프를 돌며 처리하면 어떨까요?
가랑비 (10,530 포인트) 님이 2015년 1월 21일 답변
너무어렵다ㅠ님이 2015년 1월 27일 채택됨
asynctask 에서 배열받고 루프하는작업이 이해가안되네요. 쪽지보냈는데 확인해주세요 ㅠㅠ
쪽지가 안왔습니다만..ㅎㅎ

ArrayList<String> urlArray = new ArrayList<String>();
urlArray.add("이미지경로1");
urlArray.add("이미지경로2");
urlArray.add("이미지경로3");
...
opHttpCon.execute(bmImage, urlArray);
이렇게 하고 AsyncTask의 doInBackground에서

ArrayList<String> urlArray = (ArrayList<String>) params[1];

요렇게 받고, 비트맵을 하나하나 받아오는 작업을 처리.. 하면 되지 않을까요?
직접 구현해 본 것은 아니라 확실하진 않습니다~~ㅎㅎ
doingbackground 에서   ArrayList<String> urlArray = (ArrayList<String>) params[1]; wnaus 밑에 string url 여기가 말썽이드라구요?
0 추천
루프돌면서 하나씩 다운받으세요.
익명사용자 님이 2015년 1월 21일 답변
for 문사용해서 하라는말씀인가요?
...