【发布时间】:2017-05-01 09:58:28
【问题描述】:
我尝试过使用 Picasso 以及我在 stackoverflow 上可能找到的所有方法。我正在用相机拍摄图像并获得 onActivity 结果的值。只有在我退出并重新启动应用程序后,imageView 才会更新。我希望 imageview 在我眼前改变。似乎没有任何代码在工作。
我试过了
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
profile.setImageBitmap(thumbnail);
}
});
点击确定后关闭相机视图时没有任何反应。
我也试过这个:
Thread thread = new Thread()
{
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() //run on ui thread
{
public void run()
{
profile.setImageBitmap(thumbnail);
}
});
}
};
thread.start();
但 UI 没有改变,图像保持不变。
我试过异步任务,毕加索也不行。
想知道怎么做,已经有一段时间了,我非常沮丧
以下是两种技术的代码:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && data != null) {
final Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
final File destination = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "temp.jpg");
FileOutputStream fo;
try {
fo = new FileOutputStream(destination);
fo.write(bytes.toByteArray());
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
uploadProfilePicToS3(destination.getAbsolutePath());
//this doesn't work
Thread thread = new Thread()
{
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() //run on ui thread
{
public void run()
{
profile.setImageBitmap(thumbnail);
}
});
}
};
thread.start();
//not working either!
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
profile.setImageBitmap(thumbnail);
}
});
【问题讨论】:
-
设置新图片后有没有试过
profile.postInvalidate()? -
当
onActivityResult()被调用/返回、创建新线程或任何异步操作然后选择 runOnUiThread 时,您已经在 UI 线程上,然后选择 runOnUiThread 将不会影响图像是否显示 - 放一些休息指向 as 并检查是否调用了 onActivityResult.. -
@MarkKeen 之所以调用它,是因为当我重新启动应用程序时,更改才会生效。此外,这是从片段运行
-
尝试添加一些不同的文件名或将当前毫秒添加到文件名,如 temp123.jpg
-
你已经在主线程上,删除你的线程并尝试。
标签: java android imageview picasso ui-thread