在 Android 中使用 Picasso 时图像不显示

Image is not displaying when using Picasso in Android

我正在使用 Picasso 制作一些图像并且它们工作正常,现在我正在尝试获取我之前显示过但在新 activity 中显示的图像。这个不显示,我只得到占位符

我试图删除 fit() 并将其更改为 resize(325, 275)。我检查过它是否正确地从 Parse 中获取了 url,它确实是。

在我的 onCreate

super.onCreate(savedInstanceState);
    setContentView(R.layout.change_photo);

    mSelectPhoto = (Button) findViewById(R.id.select);
    mSendPhoto = (Button) findViewById(R.id.send);
    mRetake = (Button) findViewById(R.id.retake);
    mDescription = (TextView) findViewById(R.id.description);
    preview = (ImageView) findViewById(R.id.photoPreview);
    div = (ImageView) findViewById(R.id.div);

    mFileType = ParseConstants.TYPE_IMAGE;
    currentUserID = currentUser.getObjectId();

    Log.d("============", "Retrieved " + currentUserID + " scores");

    ParseQuery<ParseObject> query = ParseQuery
            .getQuery(ParseConstants.KEY_USER_INFO);
    query.whereEqualTo(ParseConstants.KEY_USER_ID_INFO, currentUser.getObjectId());
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> objects, ParseException e) {
            if (e == null) {
                for (ParseObject thisUser : objects) {
                    currentPicture = thisUser.getParseFile("profilePicture")
                            .getUrl();
                }
            } else {
                Log.d("EditProfileFragment.jav", "Error: " + e.getMessage());
            }
        }
    });

    Picasso.with(this).load(currentPicture).fit().into(preview);

我的XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:layout_marginTop="10dp"
        android:text="Select a Photo To Get Started" />

    <ImageView
        android:id="@+id/photoPreview"
        android:layout_width="325dp"
        android:layout_height="275dp"
        android:layout_centerHorizontal="true"
        android:layout_margin="10dp"
        android:layout_below="@+id/description"
        android:contentDescription="profile picture"/>

    <Button
        android:id="@+id/select"
        style="@style/AuthButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/photoPreview"
        android:text="Select a photo"
        android:textColor="#FFFFFF" />

    <Button
        android:id="@+id/send"
        style="@style/AuthButton"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/photoPreview"
        android:layout_toLeftOf="@+id/div"
        android:text="Change Picture"
        android:textColor="#FFFFFF" />

    <ImageView
        android:id="@+id/div"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_margin="1dp"
        android:visibility="invisible"
        android:layout_below="@+id/photoPreview"
        android:src="@drawable/button_divider"/>

    <Button
        android:id="@+id/retake"
        style="@style/AuthButton"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:visibility="invisible"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/photoPreview"
        android:layout_toRightOf="@+id/div"
        android:text="Retake"
        android:textColor="#FFFFFF" />
</RelativeLayout>

您在后台任务中确定您的图片 url。在后台任务中加载 url 之前,您的 Picasso-Load 操作将简单地执行。尝试将 Picasso-Load 操作移到回调中:

query.findInBackground(new FindCallback<ParseObject>() {
    public void done(List<ParseObject> objects, ParseException e) {
        if (e == null) {
            for (ParseObject thisUser : objects) {
                currentPicture = thisUser.getParseFile("profilePicture")
                        .getUrl();
                Picasso.with(Your_Activity.this).load(currentPicture).fit().into(preview);
            }
        } else {
            Log.d("EditProfileFragment.jav", "Error: " + e.getMessage());
        }
    }
});

像这样更改您的代码,这样您就可以知道加载图像时是否发生错误。

Picasso.with(this).load(currentPicture).placeholder(R.drawable.ic_launcher).error(R.drawable.ic_launcher).fit().into(preview);

如果显示的是 ic 启动器而不是原始图像,则可能出现内存异常,请尝试 .resize() 并删除 .fit()。