>>分享Android开发相关的技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19852 个阅读者 刷新本主题
 * 贴子主题:  android异步更新UI 回复文章 点赞(0)  收藏  
作者:javathinker    发表时间:2020-03-31 22:08:03     消息  查看  搜索  好友  复制  引用

        android下面图片更新是需要启动多个子线程来进行的,而android下面是并不是线程安全的,所以thread这里是用不了的,只能用runnable接口。

         废话不多说了 直接上代码。

        1、下载线程  继承runnable接口
         public class DownloadImage implements Runnable {

           private ImageView p_w_picpathView;
                private String p_w_picpathUrl;
                private Bitmap bitmap;

               //构造的时候传入要更新的ImageView ,同时传入图片的URL
               public DownloadImage(ImageView p_w_picpathView, String p_w_picpathUrl) {
                   super();
                   this.p_w_picpathView = p_w_picpathView;
                   this.p_w_picpathUrl = p_w_picpathUrl;
               }
               public Handler handler = new Handler();

               Runnable updateResults = new Runnable() {

                   @Override
                   public void run() {
                 updateUI();
                  }
               };

               public void run() {

                   HttpGet httpRequest = null;
                   URL url;

                   try {

                      url = new URL(p_w_picpathUrl);

                     httpRequest = new HttpGet(url.toURI());

                     HttpClient httpclient = new DefaultHttpClient();

                     HttpResponse response = (HttpResponse) httpclient
                                           .execute(httpRequest);

                     HttpEntity entity = response.getEntity();

                     BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);

                     InputStream instream = bufHttpEntity.getContent();
                                       bitmap = BitmapFactory.decodeStream(instream);
                    } catch (Exception e) {
  
                      // TODO Auto-generated catch block

                     e.printStackTrace();
        }

                   handler.post(updateResults);
             }
             public void updateUI(){
             p_w_picpathView.setImageBitmap(bitmap);
             }
         }

     2、主程序

         ImageView p_w_picpathView = (ImageView)findViewById(R.id.p_w_picpath);

         String p_w_picpathUrl = "http://www.qqzhi.com/show/UploadPic/2010-5/2010521102357899.jpg";

          new Thread(new DownloadImage(p_w_picpathView, p_w_picpathUrl)).start();

         这些添加在oncreate()里面就实现了图片的更新了  

    3、配置文件AndroidManifest

    <uses-permission android:name="android.permission.INTERNET"/>

    获取访问网络权限

    4、布局文件

           <ImageView
                                  android:id="@+id/p_w_picpath"
                                  android:layout_width="wrap_content"
                                  android:layout_height="wrap_content"
                                  android:layout_x = "100px"
                                  android:layout_y = "100px"
                                  android:src="@drawable/icon"

         />

        OK,要实现的功能就完全实现了,你可以定义N个变量(就是你需要更新的图片),目前我测试一次更新20幅消耗时间1s。

         希望能对大家有所帮助,有兴趣可以一起讨论!

                                                                                      

----------------------------
原文链接:https://blog.51cto.com/alloxa/499424

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-04-07 10:06:02 重新编辑]
网站系统异常


系统异常信息
Request URL: http://www.javathinker.net/WEB-INF/lybbs/jsp/topic.jsp?postID=3139

java.lang.NullPointerException

如果你不知道错误发生的原因,请把上面完整的信息提交给本站管理人员