Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在Android上将Google云端硬盘与Picasso集成?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个应用程序,将图像存储在Google云端硬盘中,我想显示这些图库(GridView).为了更高效(即异步),我想将其与毕加索结合起来.但是PiCasso.load(String)只是一个加载的别名(Uri.parse(path)),我没有Uri,因为图像是这样加载的(简化和未公开的实用程序方法):
public static Bitmap getBitmap(DrivEID id) {
    GoogleApiClient client = ApiClientAsyncTask.createConnectedClient(App.getAppContext());
    DriveFile file = Drive.DriveApi.getFile(client,id);
    Metadata Meta = sync(file.getMetadata(client));
    Contents contents = sync(file.openContents(client,DriveFile.MODE_READ_ONLY,null));
    InputStream imageStream = contents.geTinputStream();
    try {
        return BitmapFactory.decodeStream(imageStream);
    } finally {
        IOTools.ignorantClose(imageStream);
        sync(file.discardContents(client,contents));
    }
}

是否有任何其他类似的库可能支持任意输入(String / Object)的集成?

当然我想在PiCasso中使用缓存(网络(上面的方法),磁盘,内存)的完全支持.

解决方法

当时毕加索的版本不支持我想要的东西所以我去使用了 Glide 3.这就是我设法放在一起的东西.
我还没有测试它,我把它从历史中拼凑起来,因为我从我的应用程序中删除了这个支持,这是一个过度杀伤力;但是当功能仍然存在时,它正在工作.

在ConnectionCallBACks.onConnected中:

Glide.get(getContext()).register(DrivEID.class,InputStream.class,new DrivEIDR_864_11845@odelLoader.Factory(mClient));

在ConnectionCallBACks.onConnectionSuspended中:

Glide.get(getContext()).unregister(DrivEID.class,InputStream.class);

在列表适配器:

String driveString = cursor.getString(cursor.getcolumnIndex("image"));
DrivEID drivEID = DrivEID.decodeFromString(driveString);
Glide.with(this)
     .from(DrivEID.class)
     .load(drivEID)
     .into(imageView);

滑胶:

import java.io.*;

import android.content.Context;
import android.net.Uri;

import com.bumptech.glide.load.data.DataFetcher;
import com.bumptech.glide.load.model.*;
import com.bumptech.glide.load.model.stream.StreAMModelLoader;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.drive.DrivEID;

public class DrivEIDR_864_11845@odelLoader implements StreAMModelLoader<DrivEID> {
    private final GoogleApiClient client;

    public DrivEIDR_864_11845@odelLoader(GoogleApiClient client) {
        this.CLIENt = client;
    }

    public DataFetcher<InputStream> getresourceFetcher(DrivEID model,int width,int height) {
        return new DrivEIDDataFetcher(client,model);
    }

    public static class Factory implements ModelLoaderFactory<DrivEID,InputStream> {
        private final GoogleApiClient client;

        public Factory(GoogleApiClient client) {
            this.CLIENt = client;
        }

        public ModelLoader<DrivEID,InputStream> build(Context context,GenericLoaderFactory factories) {
            return new DrivEIDR_864_11845@odelLoader(client);
        }

        public void teardown() {
            client.disconnect();
        }
    }
}

驱动相关的Glide逻辑:

import java.io.InputStream;

import org.slf4j.*;

import com.bumptech.glide.Priority;
import com.bumptech.glide.load.data.DataFetcher;
import com.google.android.gms.common.api.*;
import com.google.android.gms.drive.*;

public class DrivEIDDataFetcher implements DataFetcher<InputStream> {
    private static final Logger LOG = LoggerFactory.getLogger(DrivEIDDataFetcher.class);

    private final GoogleApiClient client;
    private final DrivEID drivEID;

    private Boolean cancelled = false;

    private DriveFile file;
    private Contents contents;

    public DrivEIDDataFetcher(GoogleApiClient client,DrivEID drivEID) {
        this.CLIENt = client;
        this.drivEID = drivEID;
    }

    public String getId() {
        return driveId.encodeToString();
    }

    public InputStream loadData(Priority priority) {
        if (cancelled) return null;
        if (client == null) {
            LOG.warn("No connected client received,giving custom error image");
            return null;
        }
        file = Drive.DriveApi.getFile(client,drivEID);
        if (cancelled) return null;
        contents = sync(file.openContents(client,null)).getContents();
        if (cancelled) return null;
        return contents.geTinputStream();
    }

    public void cancel() {
        cancelled = true;
        if (contents != null) {
            file.discardContents(client,contents);
        }
    }

    public void cleanup() {
        if (contents != null) {
            sync(file.discardContents(client,contents));
        }
    }

    private static <T extends Result> void assertsuccess(T result) {
        if (!result.getStatus().issuccess()) {
            throw new IllegalStateException(result.getStatus().toString());
        }
    }

    private static <T extends Result> T sync(PendingResult<T> pending) {
        T result = pending.await();
        assertsuccess(result);
        return result;
    }
}

大佬总结

以上是大佬教程为你收集整理的如何在Android上将Google云端硬盘与Picasso集成?全部内容,希望文章能够帮你解决如何在Android上将Google云端硬盘与Picasso集成?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。