如何将图像URL加载到图像视图中,其中图像视图设计在线程内声明?

时间:2017-12-09 09:39:12

标签: android eclipse

@SuppressWarnings({ "rawtypes" })
        public void addAttendance(ArrayList<Properties> attendanceusers) {
            //tl.removeView(tr);
            tl.removeAllViews();
            //addHeaderAttendance();
            ctr=0;
            for (Iterator i = attendanceusers.iterator(); i.hasNext();) {

                Properties p = (Properties) i.next();

                property_list.add(p);
                /** Create a TableRow dynamically **/
                tr = new TableRow(this);

                picurl=p.getPic();
                profile = new ImageView(this);

                profile.setPadding(20,50,20,50);
              /*  URL newurl = new URL(picurl); 
                bmp = BitmapFactory.decodeStream(newurl.openConnection().getInputStream()); 
                profile.setImageBitmap(bmp);*/
                try {

                      Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(picurl).getContent());
                      profile.setImageBitmap(bitmap); 
                    } catch (MalformedURLException e) {
                      e.printStackTrace();
                    } catch (IOException e) {
                      e.printStackTrace();
                    }

                profile.setOnClickListener(this);

                //myButton.setPadding(5, 5, 5, 5);
                Ll = new LinearLayout(this);

                params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
                        LayoutParams.WRAP_CONTENT);
                params.setMargins(0, 0, 0, 0);

                Ll.setPadding(0, 0, 20, 0);
                Ll.addView(profile,params);
                tr.addView((View)Ll);


                 // Add the TableRow to the TableLayout
                tl.addView(tr, new TableLayout.LayoutParams(
                        LayoutParams.FILL_PARENT,
                        LayoutParams.WRAP_CONTENT));
            }
        }

我的用于填充图像的代码无法正常工作,因为我的主要方法正在处理一个线程。你能建议一个我可以放在方法上的代码吗?这篇文章与堆栈中的任何其他帖子不重复。 我在我正在工作的其他类上尝试了这个代码,但是如果main方法(我使用的是一个线程)它会闪烁并闪烁:

new AsyncTask<Void, Void, Void>() {                  
                    @Override
                    protected Void doInBackground(Void... params) {
                        try {
                            InputStream in = new URL(picurl).openStream();
                            bmp = BitmapFactory.decodeStream(in);
                        } catch (Exception e) {
                           // log error
                        }
                        return null;
                    }

                    @Override
                    protected void onPostExecute(Void result) {
                        if (bmp != null)
                            profile.setImageBitmap(bmp);
                    }

               }.execute();

但是,如果我把它放在我粘贴的第一个代码中。 ui将不断闪烁,因为它是一个线程内的线程。我的图像太大了我无法正确调整它你能帮助我吗?我会保证给那些可以帮助我的人一张支票和一个加号,对于那些努力的人我也会给出一点意见

1 个答案:

答案 0 :(得分:1)

我认为你不需要使用线程或类似的想法。

只需添加到您的项目PicassoGlide

即可

此库支持从Web资源,内存或外部链接加载图像。这将解决闪烁问题,它是缓存和安全内容加载的良好解决方案。