zoukankan      html  css  js  c++  java
  • 中级实训Android学习记录——项目3制作

    学习记录 2020/11/27

    • 使用图片加载库Picasso出现问题,无法加载图片

      • 解决方法:
        为应用加上网络的访问权限

        <uses-permission android:name="android.permission.INTERNET" />
        
    • 使用RecyclerView的Adapter去增加或减少list中的项数的时候,最后需要notify一下

      • 示例:

         public void addItem(String url) {
             list.add(url);
             notifyItemInserted(list.size()-1);
             // 提醒列表中插入个项的位置
         }
        
         public void clearItems() {
             list.clear();
             notifyDataSetChanged();
             // 提醒刷新整个列表
         }
        
    • Picasso的一般用法

      Picasso picasso = Picasso.get();
      picasso.load(list.get(position))
           .placeholder(R.mipmap.ic_launcher)//占位图
           .error(R.drawable.ic_launcher_background) //加载失败的图
           .fit()//充满
           .into(holder.imageView);//加载到的ImageView
      

      此时其实会有图片问题,如果ImageView的设置height是wrap_content,那么最后的height会和placeholder中的图片一样高,而不是和加载的图片一样高。

      而fit会帮我们降低分辨率并将图片以当前的宽高进行拉伸,所以我们最后得到的图片可能并不美观。(目前未解决,只能在xml文件中设置宽和高,或者调用resize)

    学习记录 2020/12/12

    • 继续之前使用Picasso库进行项目三

      • 出现错误:
        Picasso并未提供清除缓存的接口

        解决方法:

        改用ImageLoader库来实现项目三

    • 使用ImageLoader库实现项目三

      • 引用之前实现的RecyclerView的模板,将HolderImageViewImageLoaderdisplay方法来从网络/本地加载图片
    • 遇到的困难

      • 首先,如同相似的网络请求一样,我们需要设定权限问题

        // AndroidManifest.xml
        	<uses-permission android:name="android.permission.INTERNET"/>
         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        

        如上

      • 在过程中发现,仅仅是请求网络和存储的权限并不够还需要ClearTextTraffic的权限

        AndroidManifest.xml中的application中插入以下语句

        // AndroidManifest.xml
        <application
        	...
        	android:usesCleartextTraffic="true"
        	...
        </application>
        
      • 在使用RecyclerView时,在更新数据的时候不小心使用了notifyAll(),以为他就是刷新数据用的

        使用notifyDataSetChanged();来代替notifyAll()

      • 在用ImageLoader清空缓存时,我发现仅调用clearMemoryCache()方法是不够的

        需要继续调用另一个方法:

         public void delete() {
             this.imageLoader.clearMemoryCache();
             this.imageLoader.clearDiskCache();
         }
        

        需要上述两个方法一同调用才可以,因为我们的DisplayImageOptions设置了

        .cacheInMemory(true)// 设置下载的图片是否缓存在内存中
        .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中
        

        这个设置说明图片既可以存在缓存中,也可以存在SD卡中,所以我们需要清除两个Cache才行

    • 实现效果

    查看图片 清除
    image-20201212201804811 image-20201212201840617
    清除后加载(速度较快) 删除缓存后加载(速度较慢)
    image-20201212201918755 image-20201212201945217
  • 相关阅读:
    所谓的飞扬档案管理软件
    通过实例学习Virtools脚本语言VSL 解析字符串
    SQLite FAQ中文版
    通过实例学习Virtools脚本语言VSL 将物体排列于圆周上
    通过实例学习Virtools脚本语言VSL 解二次方程
    out 和 ref
    ASP.NET MVC深度接触:ASP.NET MVC请求生命周期
    ICSharpCode.SharpZipLib 压缩
    aspnet_regiis.exe 详解
    ASP.NET 配置文件 configSource 的用法
  • 原文地址:https://www.cnblogs.com/lwfing/p/14053990.html
Copyright © 2011-2022 走看看