728x90
* 개인 앱개발을 하면서 외부이미지를 url주소를 통해 가져와 사용하려고하는데 잘되지않아 이를 해결하고
해결방법을 정리해보았습니다.
1. 네트워크 작업은 메인Thread가 아니니 별도의 Thread나 AsyncTask에서 해야한다.
2. url 이미지를 업로드하는 쓰레드가 완료될떄까지 메인쓰레드는 대기하여야한다.
3. url을 사용할것이므로 INTERNET permissin을 허용해주어야 한다. mainfest에서
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@color/white">
<ImageView
android:id="@+id/imageview1"
android:layout_width="300dp"
android:layout_height="300dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"></ImageView>
</androidx.constraintlayout.widget.ConstraintLayout>
MainaActivity.java
package com.example.imagecro;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.webkit.WebView;
import android.widget.ImageView;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView)findViewById(R.id.imageview1);
Thread mThread = new Thread() {
@Override
public void run() {
try {
URL url = new URL("https://asddsa.soll0803.repl.co/kospi.PNG");
// Web에서 이미지를 가져온 뒤
// ImageView에 지정할 Bitmap을 만든다
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true); // 서버로 부터 응답 수신
conn.connect();
InputStream is = conn.getInputStream(); // InputStream 값 가져오기
bitmap = BitmapFactory.decodeStream(is); // Bitmap으로 변환
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
mThread.start(); // Thread 실행
try {
// 메인 Thread는 별도의 작업 Thread가 작업을 완료할 때까지 대기해야한다
// join()를 호출하여 별도의 작업 Thread가 종료될 때까지 메인 Thread가 기다리게 한다
mThread.join();
// 작업 Thread에서 이미지를 불러오는 작업을 완료한 뒤
// UI 작업을 할 수 있는 메인 Thread에서 ImageView에 이미지를 지정한다
imageView.setImageBitmap(bitmap);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
728x90
'안드로이드' 카테고리의 다른 글
안드로이드 RecyclerView 사용법 (튜토리얼 ) (0) | 2020.11.23 |
---|---|
안드로이드 스튜디오 ListView 튜토리얼 / 기본개념 / 문자열 ListView (0) | 2020.11.18 |
안드로이드 스튜디오 AsyncTask 사용하기. / 안드로이드 스튜디오 백그라운드 실행 (0) | 2020.11.16 |
파이썬 코스피지수 실시간으로 크롤링하기 (beautifulsoup) (0) | 2020.11.16 |
파이썬 panda를 이용하여 상장사 주식데이터 가져오기 / pandas 데이터프레임을 엑셀로 저장하기 (0) | 2020.11.16 |