컴퓨터/android, ios

[Android Studio] 이미지 저장공간 안쓰고 url로 listview 위 ImageView에 image 연결하기

정석이 2021. 8. 28. 20:49

 

제목 그대로... 이미지를 굳이 drawable 등에 넣어서 보여주지 말고 url로 바로 연결해버리는 방법!! 이다.

 

 

listview 위에 있는 ImageView 안에 url을 이용해 사진을 넣을 것이다.

 

 

https://ticssfm.tistory.com/18

 

[Android Studio] 아래로 swipe해서 새로고침 하는 listview 구현하기

아래로 스와이프해서 새로고침하는 listview 구현하기! 내가 구현한건 userID = user2일 때 서버에서 가져온 값을 listview에 넣어서 보여주는 것이다. JSON 형식 JSON으로 가져올 것이기 때문에 필요 조건

ticssfm.tistory.com

 

 

 

이건 이전 포스팅인데 여기의 부속 내용이다!

 

 

코드를 필요한 부분만 잘랐으므로 모든 코드를 보려면 저 링크로 들어가기!

 

 

 

 

 

 


 

 

 

사용 방법

 

 

 

사진 url 예시 :                 https://media.gucci.com/style/DarkGray_Center_0_0_650x650/1626455703/360_443496_DRWAR_9022_001_100_0000_Light-GG-2016.jpg

 

 

구찌 공식 스토어에서 가져온 사진이다.

 

 

 

 

 

Main

 

 // 이름과 url을 매치할것이다. 둘 다 배열에 넣어주었다.
 String p_name[] = {"583571 1X5CG 6775", "660195 17QDT 2582", "443496 DRWAR 9022", "AS2696 B06364 NE798", "AS2756 B06315 NF024", "AS2785 B06505 ND365"};
 String image[] = {"https://media.gucci.com/style/DarkGray_Center_0_0_800x800/1613669409/583571_1X5CG_6775_001_058_0020_Light-GG.jpg", "https://media.gucci.com/style/DarkGray_Center_0_0_650x650/1625733904/360_660195_17QDT_2582_001_100_0000_Light-.jpg",
                "https://media.gucci.com/style/DarkGray_Center_0_0_650x650/1626455703/360_443496_DRWAR_9022_001_100_0000_Light-GG-2016.jpg", "https://www.chanel.com/images/q_auto,f_auto,fl_lossy,dpr_auto/w_1920/flap-bag-black-white-tweed-aged-calfskin-aged-pale-yellow-metal-tweed-aged-calfskin-aged-pale-yellow-metal-packshot-default-as2696b06364ne798-8840481177630.jpg",
                "https://www.chanel.com/images/q_auto,f_auto,fl_lossy,dpr_auto/w_1920/e_trim:0/shopping-bag-black-white-shearling-lambskin-gold-tone-metal-shearling-lambskin-gold-tone-metal-packshot-default-as2756b06315nf024-8840469807134.jpg",
                "https://www.chanel.com/images/q_auto,f_auto,fl_lossy,dpr_auto/w_1920/flap-bag-black-pink-gray-embroidered-wool-tweed-ruthenium-finished-metal-embroidered-wool-tweed-ruthenium-finished-metal-packshot-default-as2785b06505nd365-8840473378846.jpg"};


	//PersonalData를 만들어서 보내줄 것이다.
                PersonalData personalData = new PersonalData();


	//이름에 따라 url 연결하고 personalData로 보내기
                for(int j = 0; j < p_name.length; j++){
                    if(p_name[j].equals(name)) {
                        personalData.setMember_image(image[j]);
                        break;
                    }
                    else{
                    }
                }



                mArrayList.add(personalData);
                mAdapter.notifyDataSetChanged();

 

 

personalData로 보내서 UserAdapter로 보낼 것이다.

 

 

 

 

 

personalData

 

public class PersonalData {

    private String member_image;

 
    public String getMember_image() {
        return member_image;
    }

    public void setMember_image(String member_image) {
        this.member_image = member_image;
    }
}

 

 

 

 

 

UserAdapter

 

public class UserAdapter extends RecyclerView.Adapter<UserAdapter.CustomViewHolder> {

    private ArrayList<PersonalData> mList = null;
    private Activity context = null;
    Bitmap bitmap; // 이미지 불러올 때 사용



    public UserAdapter(Activity context, ArrayList<PersonalData> list) {
        this.context = context;
        this.mList = list;
    }

    class CustomViewHolder extends RecyclerView.ViewHolder {
        protected ImageView image;


        public CustomViewHolder(View view) {
            super(view);
            this.image = (ImageView) view.findViewById(R.id.saleImage);
        }
    }


    @Override
    public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.listview, null);
        CustomViewHolder viewHolder = new CustomViewHolder(view);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull CustomViewHolder viewholder, int position) {



	//이미지 받아오는 부분
        Thread mThread = new Thread(){
            @Override
            public void run() {
                try{
                    URL url = new URL(mList.get(position).getMember_image());
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setDoInput(true);
                    conn.connect();

                    InputStream is = conn.getInputStream();
                    bitmap = BitmapFactory.decodeStream(is);
                } catch (MalformedURLException e){
                    e.printStackTrace();
                } catch (IOException e){
                    e.printStackTrace();
                }
            }
        };

        mThread.start();

        try{
            mThread.join();
            viewholder.image.setImageBitmap(bitmap);
        } catch (InterruptedException e){
            e.printStackTrace();
        }


    }

    @Override
    public int getItemCount() {
        return (null != mList ? mList.size() : 0);
    }

}

 

 

 

 

thread를 이용해 처리하며 비트맵으로 쪼개서 사용한다.!