我已经尝试过我在这个问题上找到的每一个答案都没有成功。 我的用户从他们的图库中选择一个图像,使用Picasso在ImageView中显示,但它永远不会被加载到图像视图中。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if(resultCode == RESULT_OK){
if(requestCode == SELECT_PICTURE){
String selectedImageURI = data.getData().getPath();
File imageData = new File(String.valueOf(selectedImageURI));
//selectedImagePath = getPath(selectedImageURI);
if(!image1_exists){
Picasso.with(MemoriesActivity.this).load(imageData).noPlaceholder().centerCrop().fit().into(image1);
}
else if(!image2_exists){
//This is executed
Picasso.with(MemoriesActivity.this).load(imageData).noPlaceholder().centerCrop().fit().into(image2);
}
else if(!image3_exists){
//Picasso.with(MemoriesActivity.this).load(imageData).centerCrop().fit().into(image3);
}
}
}
}
public void addPhoto(View v){
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);
}
我找不到任何可解释的原因除了onActivityResult与Picasso一起出现问题之外,因为我从后端获取图像时使用完全相同的Picasso构建/方法加载图像。
编辑解决方案
public void attachImage(Uri uri, int imageIndex) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 0;
InputStream stream;
try {
stream = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(stream);
Bitmap image_scaled = Bitmap.createScaledBitmap(bitmap, 800, 800 * bitmap.getHeight() / bitmap.getWidth(), false);
if (imageIndex == 0) {
uploadImage(image_scaled, "image1");
handler.get(imageIndex).loadImageFromUri(this,(ImageView) findViewById(R.id.image1),uri);
handler.get(imageIndex).loadEnlargedImageFromUri(this,image1_full,uri);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
所以我创建了这个方法(它正在构建中,但解决方案保持不变)并在 onActivityResult 中调用它:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImage = data.getData();
int imageIndex = getFirstNonExistingImage();
if (imageIndex == 0) {
attachImage(selectedImage,imageIndex);
}
}
}
}
我使用自定义Picasso类(handler.loadImageFromUri)加载URI,但原理相同。
答案 0 :(得分:1)
解决。不明白为什么,但它有效。
答案 1 :(得分:0)
从URI获取真实路径并将其设置为Picasso。
Uri selectedImage = data.getData();
imagePath = getRealPathFromURI(this, selectedImage);
public String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = {MediaStore.Images.Media.DATA};
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
答案 2 :(得分:0)
您不需要使用毕加索进行游标查询。
使用毕加索你只需要编写一行代码我已扩展它以便更好地理解: -
//Get image Uri
Uri selectedImageURI = data.getData();
//Load image from picked Uri
Picasso.with(MainActivity1.this).load(selectedImageURI).noPlaceholder().centerCrop().fit()
.into((ImageView) findViewById(R.id.imageView1));