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

안드로이드 웹서버 이미지 로딩 문의

0 추천

안드로이드에서 웹서버에 있는 이미지를 읽어와 커스텀 리스트 뷰에 뿌려 주는 프로그램을 만들고있는데 

이미지는 가지고 오나 로딩이 매우 느리고, A 이미지가 리스트뷰에 첫번째에 로딩 되야 되는데 B,C,D,F 이미지들이 로딩됬다가 5초 정도 있으면 A 이미지로 돌아옵니다 .

조언좀 부탁드립니다  어댑터가 글자수 넘어가서 댓글에 달았습니다 

class myThread extends Thread {
    public void run() {
        Document doc = null;
        //String html = "http://211.226.100.190:8080/db/nemotest.jsp";
        try {
            URL url = new URL(clickhtml);

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                doc = Jsoup.connect(clickhtml).get();

                Elements img = doc.select("img");
                Elements atag = doc.select("h1");
                final String[] asrc = new String[img.size()];
                String[] imgsrc = new String[img.size()];
                address = new String[atag.size() / 2];
                name = new String[atag.size() / 2];
                final ListView lv = (ListView) findViewById(R.id.listview);
                final ArrayList<Story> al = new ArrayList<Story>();
                al.clear();


                int count = 0;
                for (int j = 0; j < atag.size() / 2; j++) {
                    address[j] = doc.select("h1").get(count).getElementsByTag("h1").html();

                    count++;
                    name[j] = doc.select("h1").get(count).getElementsByTag("h1").html();
                    count++;

                }

                for (int i = 0; i < img.size(); i++) {
                    imgsrc[i] = doc.select("a").get(i).getElementsByTag("img").attr("src");
                    asrc[i] = doc.select("a").attr("href");
                    al.add(new Story(name[i], address[i], imgsrc[i]));

                }
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        MyAdapter adapter = new MyAdapter(
                                MainActivity.this,
                                R.layout.list_item,
                                al);

                        lv.setAdapter(adapter);

                    }
                });
                lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                        Toast.makeText(getApplicationContext(), asrc[position], Toast.LENGTH_SHORT).show();

                        String DetailHttp = asrc[position];
                        Intent intent = new Intent(MainActivity.this, Detail.class);
                        intent.putExtra("DetailHttp", DetailHttp);
                        startActivity(intent);

                    }
                });

            }


        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}



public class Story {
    String date = "";
    String message = "";
    String img = "";

    public Story(String date, String message, String img) {
        this.date = date;
        this.message = message;
        this.img = img;
    }

    public Story() {
    }
}


public 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);
        bmImage.setImageBitmap(bm);
    }
}
kane9529 (1,110 포인트) 님이 2019년 5월 28일 질문
class MyAdapter extends BaseAdapter {
    Context context;
    int layout;
    ArrayList<Story> al;
    LayoutInflater inf;

    public MyAdapter(Context context, int layout, ArrayList<Story> al) {
        this.context = context;
        this.layout = layout;
        this.al = al;
        this.inf = (LayoutInflater) context.getSystemService
                (Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return al.size();
    }

    @Override
    public Object getItem(int position) {
        return al.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View v, ViewGroup parent) {
        if (v == null)
            v = inf.inflate(layout, null);

        TextView tv1 = (TextView) v.findViewById(R.id.text1);
        TextView tv2 = (TextView) v.findViewById(R.id.text2);
        ImageView iv = (ImageView) v.findViewById(R.id.image);

        Story s = al.get(position);
        tv1.setText(s.date);
        tv2.setText(s.message);
        OpenHttpConnection opHttpCon = new OpenHttpConnection();
        opHttpCon.execute(iv, "http://192.168.28.5:8080/db/" + s.img);

        return v;
    }
}

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...