Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的ImageView(Android Studio)的图像只有在onClick方法结束时才会改变?_Java_Android_Android Studio_Imageview_Picasso - Fatal编程技术网

Java 为什么我的ImageView(Android Studio)的图像只有在onClick方法结束时才会改变?

Java 为什么我的ImageView(Android Studio)的图像只有在onClick方法结束时才会改变?,java,android,android-studio,imageview,picasso,Java,Android,Android Studio,Imageview,Picasso,下面的代码显示了如何使用毕加索(Android上)将图像从我的服务器加载到ImageView。我发现ImageView中的图像在方法完成时正在更改,但我想在代码行执行时更改它 btn_startlive.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ while(something_that_is_true_for

下面的代码显示了如何使用毕加索(Android上)将图像从我的服务器加载到
ImageView
。我发现
ImageView
中的图像在方法完成时正在更改,但我想在代码行执行时更改它

btn_startlive.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){


    while(something_that_is_true_for_a_long_time){        
       Picasso.with(img_live.getContext()).load("http://localhost:8000/livepicture")
                      .networkPolicy(NetworkPolicy.NO_CACHE)
                      .placeholder(img_live.getDrawable())
                      .memoryPolicy(MemoryPolicy.NO_CACHE)
                      .into(img_live);
         }      


            }
        });
在本例中,图像不变。是因为方法没有结束吗?如何修复它?

您的
onClickListener()
看起来不错。在onClickListener()方法中
SystemClock.sleep(2000)停止应用程序(据我所知,所有线程)。因此,您的图像无法立即加载


只需删除
SystemClock.sleep(2000)就是这样

如果你想更有效地使用你的毕加索图书馆,你可以检查这个

如果删除SystemClock.sleep()后图像加载速度太慢(您说这只是为了显示您的案例),可能是图像太大而无法处理

如果加载了大量图像,请尝试使用“调整大小”以获得更好的内存性能:

Picasso.with(getActivity()).load(getPixId).resize('widthImageView', 'heightImageView').noFade().into(imageView);
编辑:如果您试图将太大的图像文件加载到毕加索,它会延迟显示图像。为了消除与图像大小有关的问题,请在毕加索行中添加
.resize()
方法

 Picasso.with(img_live.getContext())
.load("http://localhost:8000/livepicture") 
.networkPolicy(NetworkPolicy.NO_CACHE) 
.placeholder(img_live.getDrawable()) .memoryPolicy(MemoryPolicy.NO_CACHE)
.resize(100, 100) 
.into(img_live); // resizes the image to these dimensions (in pixel). does not respect aspect ratio 

移除
SystemClock.sleep(2000)这不是重点,它只是解释我的问题是什么。通常情况下,毕加索线周围会有一个循环,但图像永远不会改变,因为该方法不会到达终点。这是一个网络调用(在本例中为本地主机),因此需要时间,请使用探查器验证网络活动安卓仅在应用程序的自定义代码完成后有效地获取视图更新。尤其是如果您的
onClick
运行在更新UI的同一线程上。@AlexanderZ,我不明白您希望得到什么样的解决方案。我认为,已经提出的删除
SystemClock.sleep
(确实可以让图像立即显示)的解决方案不符合要求。因此,如果您更新问题以更好地解释您希望从这段代码中得到什么,我(或其他人)可能会提供更多帮助。谢谢。但是,如果我删除
SystemClock.sleep(2000)
,并在毕加索的线条上画一个while循环,图像也不会改变(因为该方法没有结束?。@AlexanderZ,你的评论意味着你的问题目前与你实际遇到的问题无关。如果是这样,请编辑它并更好地解释问题。@M.Prokhorov edited。您能在毕加索行中添加
.resize()
方法并与我们联系吗<代码>毕加索.with(img_live.getContext()).load(“http://localhost:8000/livepicturenetworkPolicy(networkPolicy.NO_CACHE).占位符(img_live.getDrawable()).memoryPolicy(memoryPolicy.NO_CACHE).调整大小(100100).into(img_live)//将图像大小调整为这些尺寸(以像素为单位)。不尊重纵横比@AlexanderZ。我想消除你的问题是否与图像大小有关@亚历山大。