亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Picasso中使用磁盤緩存?

如何在Picasso中使用磁盤緩存?

HUWWW 2019-07-19 15:02:47
如何在Picasso中使用磁盤緩存?我正在使用畢加索(Picasso)在我的Android應用程序中顯示圖像:/** * load image.This is within a activity so this context is activity */public void loadImage (){     Picasso picasso = Picasso.with(this);      picasso.setDebugging(true);     picasso.load(quiz.getImageUrl()).into(quizImage);}我已經啟用了調試,它總是顯示紅色和綠色,但從不顯示黃色現在,如果我加載相同的圖像,下次,互聯網是不可用的,圖像是不加載的。問題:它沒有本地磁盤緩存嗎?如何啟用磁盤緩存,因為我將多次使用相同的映像。是否需要向Android清單文件添加一些磁盤權限?
查看完整描述

3 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

我就是這么做的。效果很好。

首先,將OkHttp添加到應用程序模塊的Gradle構建文件中:

compile 'com.squareup.picasso:picasso:2.5.2'compile 'com.squareup.okhttp3:okhttp:3.10.0'compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'

然后使類擴展Application

import android.app.Application;import com.jakewharton.picasso.OkHttp3Downloader;import com.squareup.picasso.Picasso;public class Global extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

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

    }}

將其添加到Manifest文件,如下所示:

<application
        android:name=".Global"
        .. ></application>

現在就像往常一樣使用畢加索。沒有變化。

編輯:

如果您只想使用緩存的映像。像這樣打電話給圖書館。我注意到如果我們不添加網絡策略,圖像不會出現在完全離線啟動時即使它們被緩存..下面的代碼解決了這個問題。

Picasso.with(this)
            .load(url)
            .networkPolicy(NetworkPolicy.OFFLINE)
            .into(imageView);

編輯#2

以上代碼的問題是,如果清除緩存,Picasso將繼續在緩存中脫機查找它,然后失敗,下面的代碼示例將查看本地緩存,如果未找到脫機,它將聯機并補充緩存。

Picasso.with(getActivity()).load(imageUrl).networkPolicy(NetworkPolicy.OFFLINE).into(imageView, new Callback() {
    @Override
    public void onSuccess() {

    }

    @Override
    public void onError() {
        //Try again online if cache failed
        Picasso.with(getActivity())
                .load(posts.get(position).getImageUrl())
                .error(R.drawable.header)
                .into(imageView, new Callback() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {
                Log.v("Picasso","Could not fetch image");
            }
        });
    }});


查看完整回答
反對 回復 2019-07-19
  • 3 回答
  • 0 關注
  • 836 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號