Android 使用毕加索(或Glide)和改装在RecyclerView中显示图像,仅供认证用户使用

Android 使用毕加索(或Glide)和改装在RecyclerView中显示图像,仅供认证用户使用,android,laravel,android-recyclerview,picasso,android-glide,Android,Laravel,Android Recyclerview,Picasso,Android Glide,我一直在使用recyclerview显示我的联系人,并显示他们的基本数据,包括用户图像。它的工作,因为它应该,毕加索是伟大的,我得到了一个非常酷的清单 现在,我正试图禁用用户查看图像,直到验证-即我想禁用查看图像的任何人谁不是一个认证的用户。 我已经在我的服务上这样做了,并且禁用了除我的laravel应用程序之外的任何人来打开图像链接。现在我面临一个问题——当我返回图像时,它不是一个链接,而是一个byte[]格式, 我不能用毕加索来展示它。我可以尝试将其转换为Bitmap=BitmapFacto

我一直在使用recyclerview显示我的联系人,并显示他们的基本数据,包括用户图像。它的工作,因为它应该,毕加索是伟大的,我得到了一个非常酷的清单

现在,我正试图禁用用户查看图像,直到验证-即我想禁用查看图像的任何人谁不是一个认证的用户。 我已经在我的服务上这样做了,并且禁用了除我的laravel应用程序之外的任何人来打开图像链接。现在我面临一个问题——当我返回图像时,它不是一个链接,而是一个
byte[]
格式, 我不能用毕加索来展示它。我可以尝试将其转换为
Bitmap=BitmapFactory.decodeByteArray(bytes,0,bytes.length)然后将位图转换为可绘制,如:
Drawable-Drawable=new-bitmappdrawable(getResources(),bitmap),然后将可绘制显示为image
imageView.setImageDrawable(可绘制)
我的问题是使用毕加索或glide显示图像的最佳方式是什么,以及如何改进以仅为经过身份验证的用户返回图像。是否有其他方法可以从laravel服务返回图像?
有没有办法将字节格式与毕加索或glide一起使用?或者是否有其他格式可以将我的
字节[]
转换为显示在recyclerview中,而不会对性能产生负面影响

当前在我的ContactsAdapter中显示毕加索的图像:

@Override
public void onBindViewHolder(ContactsAdapter.ContactsViewHolder holder, int position) {
    Contact contact = contactList.get(position);

    holder.userName.setText(contact.getUserName());

    TextDrawable.IBuilder builder = TextDrawable.builder()
            .beginConfig()
            .withBorder(0)
            .toUpperCase()
            .endConfig()
            .round();

    ColorGenerator generator = ColorGenerator.MATERIAL;
    int color = generator.getColor(contact.getUserId());
    textDrawable = builder.build(contactList.get(position).getUserName().substring(0, 1), color);
    holder.thumbNail.setImageDrawable(textDrawable);

    Picasso.with(context)
            .load(AppConfig.URL_PROFILE_PHOTO + contact.getThumbnailUrl()) // DISK URL WITH USER IMAGE NAME
            .placeholder(textDrawable)
            .error(textDrawable)
            .transform(new CircleTransform())
            .into(holder.thumbNail);
}
Laravel服务将链接转换为图像,如下所示:

return Image::make($storagePath)->response();
我提取了ProfileImage方法,并尝试修改它以使用我获得的服务:

private void ProfileImage(HashMap<String, String> user, String name, String id) {
    TokenManager tokenManager = TokenManager.getInstance(getSharedPreferences("prefs", MODE_PRIVATE));
    ApiInterface apiService = ApiClient.createServiceWithAuth(ApiInterface.class, tokenManager);

    ColorGenerator generator = ColorGenerator.MATERIAL;
    int color = generator.getColor(id);
    String firstLetter = name.substring(0, 1);
    TextDrawable textDrawable = TextDrawable.builder().buildRect(firstLetter, color);
    holder.thumbNail.setImageDrawable(textDrawable);

    Call<ResponseBody> call = apiService.getUserImage(id);
    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {

            if (response.isSuccessful()) {
                byte[] bytes = new byte[0];
                try {
                    bytes = response.body().bytes();

                    Picasso.with(getApplicationContext())
                            .load(/** I CANNOT USE THE URL HERE */)
                            .placeholder(textDrawable)
                            .error(textDrawable)
                            .centerCrop()
                            .fit()
                            .into(holder.thumbNail);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                if (response.code() == 401) {
                    finish();
                } else {
                    Log.d(TAG, "There was an error: " + response);
                }
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Log.e(TAG, t.toString());
        }
    });
}
private void ProfileImage(HashMap用户、字符串名称、字符串id){
TokenManager TokenManager=TokenManager.getInstance(getSharedReferences(“prefs”,MODE_PRIVATE));
ApiInterface apiService=ApiClient.createServiceWithAuth(ApiInterface.class,tokenManager);
ColorGenerator=ColorGenerator.MATERIAL;
int color=generator.getColor(id);
String firstLetter=name.substring(0,1);
TextDrawable TextDrawable=TextDrawable.builder().buildRect(第一个字母,颜色);
holder.thumbNail.setImageDrawable(textDrawable);
Call Call=apiService.getUserImage(id);
call.enqueue(新回调(){
@凌驾
公共void onResponse(呼叫,改装2.响应){
if(response.issusccessful()){
字节[]字节=新字节[0];
试一试{
字节=响应.body().bytes();
Picasso.with(getApplicationContext())
.load(/**我无法在此处使用URL*/)
.占位符(可文本绘制)
.错误(可textDrawable)
.centerCrop()
.fit()
.插入(支架.缩略图);
}捕获(IOE异常){
e、 printStackTrace();
}
}否则{
if(response.code()==401){
完成();
}否则{
Log.d(标记“有一个错误:+响应”);
}
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(TAG,t.toString());
}
});
}

如果可以切换到
Glide
,则可以直接使用
Glide.with().load(byte[]model)

bytes = response.body().bytes();

Glide.with(getApplicationContext())
     .load(bytes)
     .placeholder(textDrawable)
     .error(textDrawable)
     .centerCrop()
     .fitCenter()
     .into(holder.thumbNail);

如果可以切换到
Glide
,则可以使用
Glide.with().load(byte[]model)
directly@BachVu我可以切换:)但这种方式会对应用程序性能产生负面影响吗?在加载图像时,使用
load(url)
的旧方法速度非常快,我根本没有任何问题,很遗憾我不能再这样使用了。我个人没有遇到任何性能问题,因此,您可以先试用一下,看看它在您的应用程序中的性能。@BachVu我今晚将试用它,并让您知道:)Thanks@BachVu你的回答让我走上了正确的轨道,所以如果你回答,我会接受。谢谢