【问题标题】:java.lang.NoSuchMethodError: No static method with(Landroid/content/Context;)java.lang.NoSuchMethodError: 没有静态方法 (Landroid/content/Context;)
【发布时间】:2019-09-05 07:34:33
【问题描述】:

您好,我正在尝试使用此库中的 https://github.com/Swati4star/Images-to-PDF ImagesToPDF 函数。我已经添加了我的应用程序中所需的所有类。

现在我在添加 ImagesToPDF 函数之前在我的应用程序中使用了 picasso。

现在添加后出现以下错误:

 java.lang.NoSuchMethodError: No static method with(Landroid/content/Context;)Lcom/squareup/picasso/Picasso; in class Lcom/squareup/picasso/Picasso; or its super classes (declaration of 'com.squareup.picasso.Picasso' appears in /data/app/com.example.onboardingversion2-sJCkixxNOR2KPNLmYYdvpQ==/base.apk!classes2.dex)

以下函数出错:

    /**
 * Opens Matisse activity to select Images
 */
private void selectImages() {
    Matisse.from(this)
            .choose(MimeType.ofImage(), false)
            .countable(true)
            .capture(true)
            .captureStrategy(new CaptureStrategy(true, AUTHORITY_APP))
            .maxSelectable(1000)
            .imageEngine(new PicassoEngine())
            .forResult(INTENT_REQUEST_GET_IMAGES);
}

应用程序崩溃并给出错误。我添加了应用程序并设置了Multidex

    public class MyApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(base);
    }
}

我还在 gradle 中添加了 multidexEnabled true。仍然抛出错误。 请帮忙。谢谢。

【问题讨论】:

  • 你在清单文件中定义了应用类吗?
  • 是的,我做到了。 @HemantParmar
  • 更新您的 picasso gradle 版本并检查。
  • 我添加了最新版本的毕加索@HemantParmar

标签: java android picasso android-multidex matisse


【解决方案1】:

问题出在一行

.imageEngine(new PicassoEngine())

其中 PicassoEngine() 类使用 Picasso.with(context).... 已弃用的模块。解决方案是您必须创建一个新类,将其命名为 NewPicassoEngine(),如下所示;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
import com.zhihu.matisse.engine.ImageEngine;

public class NewPicassoEngine implements ImageEngine {

@Override
public void loadThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView, Uri uri) {
    Picasso.get().load(uri).placeholder(placeholder)
            .resize(resize, resize)
            .centerCrop()
            .into(imageView);
}

@Override
public void loadGifThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView,
                             Uri uri) {
    loadThumbnail(context, resize, placeholder, imageView, uri);
}

@Override
public void loadImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
    Picasso.get().load(uri).resize(resizeX, resizeY).priority(Picasso.Priority.HIGH)
            .centerInside().into(imageView);
}

@Override
public void loadGifImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
    loadImage(context, resizeX, resizeY, imageView, uri);
}

@Override
public boolean supportAnimatedGif() {
    return false;
}}

并将其用作;

private void selectImages() {
Matisse.from(this)
        .choose(MimeType.ofImage(), false)
        .countable(true)
        .capture(true)
        .captureStrategy(new CaptureStrategy(true, AUTHORITY_APP))
        .maxSelectable(1000)
        .imageEngine(new NewPicassoEngine())
        .forResult(INTENT_REQUEST_GET_IMAGES);
}

这将解决您的问题。

【讨论】:

    【解决方案2】:

    毕加索大约 4 年没有更新了,它有很多问题。也许你应该切换到Glide

    【讨论】:

    • 我将 new PicassoEngine() 更改为 new GlideEngine 它仍然抛出同样的错误。
    • 试试这个: implementation ("com.github.bumptech.glide:glide:4.4.0") { exclude group: "com.android.support" }
    • 您添加了这一行或替换了之前的 GlideEngine?
    • 在依赖项中添加库并用 GlideEngine 替换 PicassoEngine
    • 请看这里:issue in Glide with same error。也许你会在那里找到答案
    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 2023-03-02
    • 2018-04-10
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多