2 votes

Picasso avec OKHttp n'affiche pas l'image : erreur de journal

J'essaie de télécharger et de mettre en cache une image avec picasso depuis un serveur web. J'ai trouvé une solution ici : https://stackoverflow.com/a/30686992/6884064

   Picasso.Builder builder = new Picasso.Builder(this);
            builder.downloader(new OkHttpDownloader(this,Integer.MAX_VALUE));
            Picasso built = builder.build();
            built.setIndicatorsEnabled(true);
            built.setLoggingEnabled(true);
            Picasso.setSingletonInstance(built);

          Picasso.with(this)
                  .load("http://i.imgur.com/Q85lste.jpg")
                  .networkPolicy(NetworkPolicy.OFFLINE)
                  .into(coverImg);

Build.gradle :

compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'

Lorsque je l'exécute, mon image de remplacement disparaît mais la nouvelle image ne se charge pas.

Le journal d'exécution me donne ceci :

D/Picasso: Main        created      [R0] Request{http://i.imgur.com/Q85lste.jpg}
D/Picasso: Dispatcher  enqueued     [R0]+6ms 
D/Picasso: Hunter      executing    [R0]+7ms 
W/System.err: remove failed: ENOENT (No such file or directory) :  /data/user/0/com.test.example1/cache/picasso-cache/journal.tmp
D/Picasso: Dispatcher  batched      [R0]+45ms for error
D/Picasso: Dispatcher  delivered    [R0]+246ms 
D/Picasso: Main        errored      [R0]+246ms 

Quelqu'un sait ce qui se passe ici ? Merci.

EDIT :

Ça marche avec ce code :

   OkHttpClient okHttpClient = new OkHttpClient();
            okHttpClient.networkInterceptors().add(new Interceptor() {
                @Override
                public Response intercept(Interceptor.Chain chain) throws IOException {
                    Response originalResponse = chain.proceed(chain.request());
                    return originalResponse.newBuilder().header("Cache-Control", "max-age=" + (60 * 60 * 24 * 365)).build();
                }
            });

            okHttpClient.setCache(new Cache(getCacheDir(), Integer.MAX_VALUE));
            OkHttpDownloader okHttpDownloader = new OkHttpDownloader(okHttpClient);
            Picasso picasso = new Picasso.Builder(this).downloader(okHttpDownloader).build();
            picasso.load("http://i.imgur.com/test.jpg").into(coverImg);

1voto

Saeed Fekri Points 36

Si vous essayez dans l'émulateur Android Studio, nettoyez le cache et les données de l'application et désinstallez-la, puis réinstallez-la. N'oubliez pas non plus les autorisations requises :

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Ça a peut-être marché. Bonne chance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X