java - 修复 ImageLoader : "Try to initialize ImageLoader which had already been initialized before" 的警告

标签 java android universal-image-loader

在我的应用程序中,我有一个包含一些项目的 ListView 。每个项目都有一个从远程 url 下载的 img。

我使用 ImageLoader 库将每个图像加载到我的应用中。

我的 ListView 构建良好,我有所有图像,但我在 LogCat 中有一个警告:

02-05 15:16:17.938: W/ImageLoader(17363): Try to initialize ImageLoader which had already been initialized before. To re-init ImageLoader with new configuration call ImageLoader.destroy() at first.

我不知道如何解决这个问题?

这是我的适配器的代码:

public class ArticleListAdapterHome extends ArrayAdapter<ArticleHome> {

    Typeface faceLight = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Light.ttf");
    Typeface faceBold = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Bold.ttf");

    public ArticleListAdapterHome(Activity activity, List<ArticleHome> articles) {
        super(activity, 0, articles);
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Activity activity = (Activity) getContext();

        LayoutInflater inflater = activity.getLayoutInflater();

        View rowView;
        ArticleHome article = getItem(position);

        if (position == 0) {

            rowView = inflater.inflate(R.layout.item_ligne_home_premier, null);

            ////////////////////////////////////////////////////////
            ///// IMAGE
            ///////////////////////////////////////////////////////
            ImageView imgfirst = (ImageView) rowView.findViewById(R.id.imgimg) ;

            DisplayImageOptions options = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisc(true)
            .build();

            ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getContext())
            .defaultDisplayImageOptions(options)
            .threadPriority(Thread.MAX_PRIORITY)
            .denyCacheImageMultipleSizesInMemory()
            .memoryCacheSize(2 * 1024 * 1024)
            .build();

            ImageLoader imageLoader = ImageLoader.getInstance();
            imageLoader.init(config); 
            imageLoader.displayImage(article.getImage(), imgfirst);

            ListView listV = (ListView)parent;
            boolean pauseOnScroll = false; // or true
            boolean pauseOnFling = true; // or false
            PauseOnScrollListener listener = new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling);
            listV.setOnScrollListener(listener);

            ////////////////////////////////////////////////////////
            ///// TITLE
            ///////////////////////////////////////////////////////
            TextView textView = (TextView) rowView.findViewById(R.id.titlepremier);     
            textView.setText(article.getTitle());
            textView.setTypeface(faceLight);
        }
        else {
            rowView = inflater.inflate(R.layout.item_ligne_home, null);

            ////////////////////////////////////////////////////////
            ///// IMAGE
            ///////////////////////////////////////////////////////
            ImageView img = (ImageView) rowView.findViewById(R.id.imgimg) ;

            DisplayImageOptions options = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisc(true)
            .build();

            ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getContext())
            .defaultDisplayImageOptions(options)
            .threadPriority(Thread.MAX_PRIORITY)
            .denyCacheImageMultipleSizesInMemory()
            .memoryCacheSize(2 * 1024 * 1024)
            .build();

            ImageLoader imageLoader = ImageLoader.getInstance();
            imageLoader.init(config); 
            imageLoader.displayImage(article.getImage(), img);

            ListView listV = (ListView)parent;
            boolean pauseOnScroll = false; // or true
            boolean pauseOnFling = true; // or false
            PauseOnScrollListener listener = new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling);
            listV.setOnScrollListener(listener);

            ////////////////////////////////////////////////////////
            ///// TITLE
            ///////////////////////////////////////////////////////
            TextView title = (TextView) rowView.findViewById(R.id.titlearticleothers);  
            title.setText(article.getTitle());
            title.setTypeface(faceBold);

            ////////////////////////////////////////////////////////
            ///// DESCRIPTION
            ///////////////////////////////////////////////////////
            TextView desc = (TextView) rowView.findViewById(R.id.descriptionarticleothers);
            desc.setText(article.getDescription());
            desc.setTypeface(faceLight);

            ////////////////////////////////////////////////////////
            ///// DATE
            ///////////////////////////////////////////////////////
            TextView date = (TextView) rowView.findViewById(R.id.date);
            String pubDate = article.getPubDate();
            SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss Z", Locale.ENGLISH);
            Date pDate;
            try {
                pDate = df.parse(pubDate);
                pubDate = DateUtils.getDateDifference(pDate);
                pubDate = pubDate.replace("-", "");
            } catch (ParseException e) {
                Log.e("DATE PARSING", "Error parsing date..");
                pubDate = "published by " + article.getAuthor();
            }
            date.setText("Il y a " +pubDate);

        }

        return rowView;

    } 

最佳答案

当您尝试初始化已经初始化的 ImageLoader 时会发生此错误。

在我的应用程序中,我在不同的 Activity 中以两种方式初始化了 ImageLoader:

1:

imageLoader.init(ImageLoaderConfiguration.createDefault(this.getSherlockActivity()));

2:

initImageLoader(); //where this function contained the configuration settings.

在我的应用程序中,我使用了导致此错误的 ViewPager,这就是原因:

重要的是要知道,当您在 ViewPager 中打开一个选项卡时,它会自动在后台加载第二个选项卡。

假设此初始化是在第一个选项卡上设置的。因此,当您转到第二个和第三个选项卡时,您会返回到第二个选项卡,然后加载第一个选项卡并尝试再次初始化 ImageLoader。

您需要做的是检查它是否已初始化

if (!imageLoader.isInited()) {
    initImageLoader();
 }

关于java - 修复 ImageLoader : "Try to initialize ImageLoader which had already been initialized before" 的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21579826/

相关文章:

java - 为什么返回语句中的后增量运算符的行为与 Eclipse 中的预期不同?

Android IN Java 8 java.time

javascript - HTML anchor 标记无法在 Android 平台中下载文件

android - 如何使用 Android Universal Image Loader 获取图像的高度和宽度?

android - 如何使用 Universal image Loader 在本地加载资源

android - 通用图像加载器图像比例

java - Spring中使用@Async和@Scheduled时检测线程状态

java - 一个好的 Java VM 中方法调用的开销是多少?

java - 网络连接如何在线程切换后存活下来?

android - ObjectInputStream java.io.StreamCorruptedException : Wrong format: 0 lollipop and marshmalow