java.lang.NoClassDefFoundError: сбой в разрешении: Ошибка Lcom / squareup / okhttp / OkHttpClient при использовании автономной функции Picasso — Android

#android #firebase #picasso #okhttp3

#Android #firebase #пикассо #okhttp

Вопрос:

Я работаю над проектом, который имеет автономную функцию, используя библиотеку Picasso в Android. Пока я просто следую руководству.

Это мой gradle:

 dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile 'com.android.support:cardview-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.google.firebase:firebase-database:9.0.2'
compile 'com.google.firebase:firebase-core:9.0.2'
compile 'com.google.firebase:firebase-auth:9.0.2'
compile 'com.firebase:firebase-client-android:2.3.1'
compile 'com.google.firebase:firebase-storage:9.0.2'
compile 'com.google.firebase:firebase-database:9.0.2'
compile 'com.firebaseui:firebase-ui-database:0.4.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
}
  

Это моя настройка Picasso:

     Picasso.Builder builder = new Picasso.Builder(this);
    builder.downloader(new OkHttpDownloader(this,Integer.MAX_VALUE)); //always give me the error to this line
    Picasso built = builder.build();
    built.setIndicatorsEnabled(false);
    built.setLoggingEnabled(true);
    Picasso.setSingletonInstance(built);
  

И именно так я называю Picasso в своем actvity.java :

 Picasso.with(this.getApplicationContext()).load(stringUriProfile).networkPolicy(NetworkPolicy.OFFLINE).into(mUriImageProfile, new Callback() {
            @Override
            public void onSuccess() {
                //the function fires whenever the picasso doesnt find picture from offline way
            }

            @Override
            public void onError() {
                Context ctx = getApplicationContext();
                Picasso.with(ctx).load(stringUriProfile).into(mUriImageProfile);
            }
        });
  

Ответ №1:

Я не до конца понимаю проблему и это решение. Похоже, что в последних версиях библиотеки OkHttp пакет, который содержит OkHttpClient , изменился. Версия 2.5.2 Picasso ожидает найти его в старом пакете, com.squareup.okhttp . Одним из решений является замена:

 compile 'com.squareup.okhttp3:okhttp:3.4.1'
  

с помощью

 compile 'com.squareup.okhttp:okhttp:2.5.0'
  

Может быть лучшее решение. Это единственное, что я нашел.

Комментарии:

1. Приятно спасти мой день, брат

Ответ №2:

Если вы хотите сохранить okhttp3 , вы можете использовать решение Джейка Уортона:

добавить в gradle:

  compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'
  

инициализировать с помощью:

  OkHttpClient client = // ...
 Picasso picasso = new Picasso.Builder(context)
     .downloader(new OkHttp3Downloader(client))
     .build()