Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OutOfMemory异常-用于加载picasso图像时适配器.notifiyDataSetChanged()的异常_Android_Out Of Memory_Picasso - Fatal编程技术网

Android OutOfMemory异常-用于加载picasso图像时适配器.notifiyDataSetChanged()的异常

Android OutOfMemory异常-用于加载picasso图像时适配器.notifiyDataSetChanged()的异常,android,out-of-memory,picasso,Android,Out Of Memory,Picasso,在用毕加索加载图像时,我遇到了outOfMemory异常。 我正在使用OkHttp创建毕加索生成器,并创建了毕加索Singleton类来缓存图像 情景: 我有100多个图像饲料是要加载。我得到一组图像,每组有25个图像url,这是我和毕加索一起设置的。我正在使用recyclerview,每当有新的映像集出现时,我都会调用adapter.notifyDataSetChanged()。我正在加载第一组-无问题,第二组和第三组在进行改装以获得下一组并添加到现有列表并调用-adapter.notifyD

在用毕加索加载图像时,我遇到了outOfMemory异常。 我正在使用OkHttp创建毕加索生成器,并创建了毕加索Singleton类来缓存图像

情景: 我有100多个图像饲料是要加载。我得到一组图像,每组有25个图像url,这是我和毕加索一起设置的。我正在使用recyclerview,每当有新的映像集出现时,我都会调用adapter.notifyDataSetChanged()。我正在加载第一组-无问题,第二组和第三组在进行改装以获得下一组并添加到现有列表并调用-adapter.notifyDataSetChanged()时。当我调用adapter.NotifyDataSetChanged()时,应用程序崩溃,outOfMemoryException

但是

当我加载所有3组75幅图像时,我不会遇到任何问题

代码: 应用程序类-我在那里创建毕加索。

 Picasso.Builder builder = new Picasso.Builder(this)
            .memoryCache(new LruCache(24000));
    builder.downloader(new OkHttpDownloader(this,Integer.MAX_VALUE));
    Picasso built = builder.build();
    built.setLoggingEnabled(true);
毕加索单人课:

public class PicassoCache {

/**
 * Static Picasso Instance
 */
private static Picasso picassoInstance = null;

/**
 * PicassoCache Constructor
 *
 * @param context application Context
 */
private PicassoCache (Context context) {

    Downloader downloader   = new OkHttpDownloader(context, Integer.MAX_VALUE);
    Picasso.Builder builder = new Picasso.Builder(context);
    builder.downloader(downloader);

    picassoInstance = builder.build();
}

/**
 * Get Singleton Picasso Instance
 *
 * @param context application Context
 * @return Picasso instance
 */
public static Picasso getPicassoInstance (Context context) {

    if (picassoInstance == null) {

        new PicassoCache(context);
        return picassoInstance;
    }

    return picassoInstance;
}

}
使用毕加索设置/加载图像的代码

  PicassoCache.getPicassoInstance(context).load(url).placeholder(R.mipmap.banner_placeholder).into(mView);
当数据集发生更改时,更新要加载的现有列表的代码

内部重新安装成功消息:

    if (response.code() == 200) {

List<CampaignCard> newCampaigns = response.body().getCampaigns();


for (int i = 0; i < newCampaigns.size(); i++) {
    if (!campaignCards.contains(newCampaigns.get(i))) {
        campaignCards.add(newCampaigns.get(i));
    }
}

dashBoardAdapter.notifyDataSetChanged();

} else if (response.code() == Params.CODE_422) {
    Utils.ShowServiceErrorMessages(getActivity(), response);
} else if (response.code() == Params.CODE_401) {
    Utils.Logout(getActivity());
}
if(response.code()==200){
List newCampaigns=response.body().getCampaigns();
对于(int i=0;i
适配器类:

public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.DashboardViewHolder> implements View.OnClickListener {


    private static final int VIEW_TYPE_CAMPAIGN = 1;
    private static final int VIEW_TYPE_FEED = 2;

    DashboardViewHolder holder;


    protected List list;
    protected int viewTypeLayout;
    Context context;
    int position;

    Dashboard.DashboardActionList actionList;
    Map<String, SourceContent> mPreviewLinkMapper;
    ViewGroup parent;

    //Picasso p;
    public DashboardAdapter(List list, int viewTypeLayout) {
        this.list = list;
        this.viewTypeLayout = viewTypeLayout;
    }

    public DashboardAdapter(List list, int viewTypeLayout, Context context, Map<String, SourceContent> mPreviewLinkMapper) {
        this.list = list;
        this.viewTypeLayout = viewTypeLayout;
        this.mPreviewLinkMapper = mPreviewLinkMapper;
    }

    @Override
    public DashboardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        context = parent.getContext();
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_feed, parent, false);
        return new DashboardViewHolder(view, 2);

    }

    @Override
    public void onBindViewHolder(DashboardViewHolder holder, final int position) {
        BindFeedData(holder, position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemCount() {
        return list.size();
    }





    @SuppressWarnings("unchecked")
    private void BindFeedData(DashboardViewHolder holder, int position) {
        List<Feed> feeds = (List<Feed>) list;
        if (holder.mBannerImage != null) {
            if (feeds.get(position).getCampaign().getParticipation().getType().toLowerCase().contains("video")) {

                holder.mPlayIcon.setVisibility(View.VISIBLE);
                String url = feeds.get(position).getCampaign().getParticipation().getThumbnail_url();
                Utils.LoadImages(context, url, holder.mBannerImage, false);

            } else if (feeds.get(position).getCampaign().getParticipation().getType().toLowerCase().contains("gif")) {

                holder.mPlayIcon.setVisibility(View.GONE);
                String url = feeds.get(position).getCampaign().getParticipation().getPost_file();
                Utils.loadGif(context, url, holder.mBannerImage);

            } else if (feeds.get(position).getCampaign().getParticipation().getType().toLowerCase().contains("link") ||
                    feeds.get(position).getCampaign().getParticipation().getType().toLowerCase().contains("youtube")) {

                holder.mPlayIcon.setVisibility(View.GONE);
                String slug = feeds.get(position).getCampaign().getSlug();
                List<String> images = mPreviewLinkMapper.get(slug).getImages();
                Utils.LoadImages(context, images.get(0), holder.mBannerImage, false);

            } else {
                holder.mPlayIcon.setVisibility(View.GONE);
                holder.mBannerImage.setVisibility(View.VISIBLE);
                String url = feeds.get(position).getCampaign().getParticipation().getPost_file();
                Utils.LoadImages(context, url, holder.mBannerImage, false);
            }
        }

        if (holder.mBrandLogo != null) {
            Utils.LoadImages(context, feeds.get(position).getInfluencer().getProfile_picture_url(), holder.mBrandLogo, true);
        }


        holder.mTitle.setText(feeds.get(position).getInfluencer().getName());
        holder.mSubTitle.setText(feeds.get(position).getCampaign().getName());
        holder.mTime.setText(feeds.get(position).getCampaign().getTimestamp());
        holder.mDescription.setText(feeds.get(position).getCampaign().getParticipation().getPost_content());
        holder.mEngagement.setText(feeds.get(position).getCampaign().getParticipation().getMetrics().getEngagements());
        holder.mImpresion.setText(feeds.get(position).getCampaign().getParticipation().getMetrics().getImpressions());
    }



    }


    public static class DashboardViewHolder extends RecyclerView.ViewHolder {

        ImageView mBannerImage, mFacebook, mTwitter, mInstagram, mPlayIcon, mHotIcon, mLocationIcon;
        CircularImageView mBrandLogo;
        CustomTextViewRegular mDescription, mTime, mOption1, mOption2, mOption3;
        CustomTextViewDemi mTitle, mSubTitle, mImpresion, mEngagement;
        LinearLayout mDetailsLayout;

        LinearLayout mOptionLayout1, mOptionLayout2, mOptionLayout3;
        public ViewGroup dropPreview;

        TableRow mTableOptions;

        public DashboardViewHolder(View v, int viewtype) {
            super(v);
            InitFeedViews(v);
          }




        private void InitFeedViews(View v) {
            mTitle = (CustomTextViewDemi) v.findViewById(R.id.adapterHeaderLayoutTitle);
            mSubTitle = (CustomTextViewDemi) v.findViewById(R.id.adapterHeaderLayoutSubTitle);
            mBrandLogo = (CircularImageView) v.findViewById(R.id.adapterHeaderLayoutLogo);
            mTime = (CustomTextViewRegular) v.findViewById(R.id.adapterHeaderLayoutTime);

            mBannerImage = (ImageView) v.findViewById(R.id.adapterFeedBannerImage);
            mPlayIcon = (ImageView) v.findViewById(R.id.adapterFeedPlayIocn);

            mImpresion = (CustomTextViewDemi) v.findViewById(R.id.adapterFeedImpressions);
            mEngagement = (CustomTextViewDemi) v.findViewById(R.id.adapterFeedEngagements);
            mDescription = (CustomTextViewRegular) v.findViewById(R.id.adapterFeedDescription);

            dropPreview = (LinearLayout) v.findViewById(R.id.drop_preview);
        }

    }

}
公共类DashboardAdapter扩展了RecyclerView。适配器实现了View.OnClickListener{
私有静态最终内部视图类型活动=1;
私有静态最终整型视图\u类型\u提要=2;
仪表板支架;
受保护名单;
受保护的int VIEWTYPE布局;
语境;
内部位置;
Dashboard.DashboardActionList操作列表;
地图mPreviewLinkMapper;
视图组父对象;
//毕加索;
公用仪表板适配器(列表,int-viewTypeLayout){
this.list=列表;
this.viewTypeLayout=viewTypeLayout;
}
公用仪表板适配器(列表列表、int viewTypeLayout、上下文上下文、映射mPreviewLinkMapper){
this.list=列表;
this.viewTypeLayout=viewTypeLayout;
this.mPreviewLinkMapper=mPreviewLinkMapper;
}
@凌驾
公用仪表板ViewHolder onCreateViewHolder(视图组父级,int-viewType){
context=parent.getContext();
View=LayoutInflater.from(parent.getContext()).flate(R.layout.adapter_feed,parent,false);
返回新的仪表板视图保持架(视图,2);
}
@凌驾
BindViewHolder上的公共无效(仪表板ViewHolder,最终整型位置){
BindFeedData(支架、位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
public int getItemCount(){
返回list.size();
}
@抑制警告(“未选中”)
专用void BindFeedData(仪表板视图保持架,内部位置){
列表提要=(列表)列表;
if(holder.mBannerImage!=null){
if(feed.get(position.getCampaign().getParticipation().getType().toLowerCase().contains(“视频”)){
holder.mPlayIcon.setVisibility(View.VISIBLE);
字符串url=feeds.get(position.getCampaign().getParticipation().getThumbnail_url();
加载图像(上下文、url、holder.mBannerImage、false);
}else if(feeds.get(position.getCampaign().getParticipation().getType().toLowerCase().contains(“gif”)){
holder.mPlayIcon.setVisibility(View.GONE);
字符串url=feeds.get(position.getCampaign().getParticipation().getPost_file();
Utils.loadGif(上下文、url、holder.mBannerImage);
}else if(feed.get(position.getCampaign().getParticipation().getType().toLowerCase().contains)(“链接”)||
feeds.get(position.getCampaign().getParticipation().getType().toLowerCase().contains(“youtube”)){
holder.mPlayIcon.setVisibility(View.GONE);
字符串slug=feeds.get(位置).getCampaign().getSlug();
List images=mPreviewLinkMapper.get(slug.getImages();
Utils.LoadImages(上下文,images.get(0),holder.mBannerImage,false);
}否则{
holder.mPlayIcon.setVisibility(View.GONE);
holder.mBannerImage.setVisibility(视图.可见);
字符串url=feeds.get(position.getCampaign().getParticipation().getPost_file();
加载图像(上下文、url、holder.mBannerImage、false);
}
}
if(holder.mBrandLogo!=null){
Utils.LoadImages(context,feed.get(position).getInfluencer().getProfile\u picture\u url(),holder.mBrandLogo,true);
}
holder.mTitle.setText(feeds.get(position.getInfluencer().getName());
holder.mSubTitle.setText(feeds.get(position.getCampaign().getName());
holder.mTime.setText(feeds.get(position.getCampaign().getTimestamp());
holder.mDescription.setText(feed.get(position.getCampaign().getParticipation().getPost_content());
holder.mEngagement.setText(feed.get(position.getCampaign().getParticipation().getMetrics().getEngagements());
holder.mImpresion.setText(feeds.get(position.getCampaign().getParticipation().getMetrics().getImpressions());
}
}
公共静态类DashboardViewHolder扩展了RecyclerView.ViewHolder{
ImageView mBannerImage、mFacebook、mTwitter、mInstagram、mPlayIcon、mHotIcon、mLocationIcon;
CircularImageView-Embrandlogo;
CustomTextViewRegular MDDescription、mTime、mOption1、mOption2、mOption3;
CustomTextViewDemi mTitle