UniversalImageLoader+HttpClient+RecycleView总结

1.UniversalImageLoader
options:
      (1)showImageOnLoading            //正在加载的图片
      (2)showImageForEmptyUri          //图上资源为空的时候显示的图片 
      (3)showImageOnFail               //加载失败时显示的图片
      (4)cacheInMemory                 //是否允许内存缓存
      (5)cacheOnDisk                   //是否允许SD卡缓存
      (6)considerExifParams            //是否考虑JPEG图像EXIF参数(旋转,翻转)
      (7)imageScaleType                //设置图片以何种编码方式显示 
/*
EXACTLY :图像将完全按比例缩小的目标大小
EXACTLY_STRETCHED:图片会缩放到目标大小完全
IN_SAMPLE_INT:图像将被二次采样的整数倍
IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
       NONE:图片不会调整
*/
      (8)bitmapConfig                  //设置图片的解码类型  ARGB8888/RGB565
      (9)resetViewBeforeLoading        //加载前是否重置
      (10)delayBeforeLoading           //加载前延迟
      (11)preProcessor                 //设置图片加入缓存前,对bitmap进行设置
      (12)postProcessor                //设置显示前的图片,显示后这个图片一直保留在缓存中
      (13)decodingOptions              //设置图片的解码配置 
      (14)extraForDownloader           //额外下载器
      (15)displayer                    //设置显示方式(样式或者动画等)
 /*
     RoundedBitmapDisplayer(int roundPixels)设置圆角图片
                                      FakeBitmapDisplayer()这个类什么都没做
                                      FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
                               SimpleBitmapDisplayer()正常显示一张图片
                                      CircleBitmapDisplayer(Color.WHITE, 5)
 */
      (16)handler                       //Handle事件




        .memoryCacheExtraOptions(480,800)                      //缓存图片的最大宽高
        .diskCacheExtraOptions(480,800,null)
.memoryCacheSize(2*1024*1024)                         //内存缓存大小
.diskCacheSize(50*1024*1024)                          //SD卡缓存大小
.threadPoolSize(3)                                    //线程池大小
.threadPriority(Thread.NORM_PRIORITY-2)              //线程优先级
        .taskExecutor(new ThreadPoolExecutor(10,30,1000, TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(10)))                                     //线程池
        .tasksProcessingOrder(QueueProcessingType.LIFO)      //设置图片加载和显示队列处理的类型
        .denyCacheImageMultipleSizesInMemory()               //设置是否允许在内存中缓存多个图片大小
        .memoryCache(new LruMemoryCache(2*1024*1024))        //LruMemoryCache这个类就是这个开源框架默认的内存缓存类,缓存的是bitmap的强引用
        .memoryCacheSizePercentage(20)                       //设置内存缓存最大大小占当前应用可用内存的百分比
        .diskCache(new UnlimitedDiskCache(cacheDir))
        .diskCacheFileCount(100)                              //缓存文件总数
        .diskCacheFileNameGenerator(new Md5FileNameGenerator())   //Md5FileNameGenerator()HashCodeFileNameGenerator()
.imageDownloader(new BaseImageDownloader(context,5*1000,30*1000))     //设置图片下载器 连接5s 读取30s
.imageDecoder(new BaseImageDecoder(true))             //设置图片解码器  true启用日记记录
        .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) //设置图片的显示选项
        .writeDebugLogs()                                      //打印DebugLogs


/*
OOM解决方案:
①减少配置之中线程池的大小,(.threadPoolSize).推荐1-5;
        ②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;
        ③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者        try.imageScaleType(ImageScaleType.EXACTLY);
        ④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;
        ⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();
*/






2.Asynchronous Http Client


get方法:client.get(url,HttpResponseHandler)


          ResponseHandler:  AsyncHttpResponseHandler 异步\ JsonHttpResponseHandler 返回JsonObject\FileAsyncHttpResponseHandler 返回文件




持久性cookies存储:
            
         PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
         myClient.setCookieStore(myCookieStore);


自定义添加cookies,使用addCookies函数:
         BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
         newCookie.setVersion(1);
         newCookie.setDomain("mydomain.com");
         newCookie.setPath("/");
         myCookieStore.addCookie(newCookie);


带参数的get/post方法:
      1.创建空的RequestParams,然后添加参数
        RequestParams params = new RequestParams();
        params.put("key", "value");
        params.put("more", "data");    
      或者
      2.创建时就添加参数
        RequestParams params = new RequestParams("single", "value");


      3.将一个已经存在的map放进RequestParams中
        HashMap<String, String> paramMap = new HashMap<String, String>();
        paramMap.put("key", "value");
        RequestParams params = new RequestParams(paramMap);    




上传带有参数的RequestParams
      1.使用inputStream流处理:
        InputStream myInputStream = blah;
        RequestParams params = new RequestParams();
        params.put("secret_passwords", myInputStream, "passwords.txt");
         
      2.使用文件对象处理:
        File myFile = new File("/path/to/file.png");
        RequestParams params = new RequestParams();
        try {
             params.put("profile_picture", myFile);
        } catch(FileNotFoundException e) {}
      
     3.使用字节流数组byte[]
        byte[] myByteArray = blah;
        RequestParams params = new RequestParams();
        params.put("soundtrack", new ByteArrayInputStream(myByteArray), "she-wolf.mp3"); 


使用FileAsyncHttpResponseHandler来下载二进制数据:
     
      AsyncHttpClient client = new AsyncHttpClient();
      client.get("https://example.com/file.png", new FileAsyncHttpResponseHandler(/* Context */ this) {
      @Override
      public void onSuccess(int statusCode, Header[] headers, File response) {
          // Do something with the file `response`
       }
      });


添加Http Basic Auth credentials:
    
      AsyncHttpClient client = new AsyncHttpClient();
      client.setBasicAuth("username","password/token");
      client.get("https://example.com");


或者:
     AsyncHttpClient client = new AsyncHttpClient();
     client.setBasicAuth("username","password", new AuthScope("example.com", 80, AuthScope.ANY_REALM));
     client.get("https://example.com");


3.RecycleView
        mRecyclerView= (RecyclerView) findViewById(R.id.asy_recyclerview);
        mAdapter=new RecycleAdapter(myDataSet);                           
        mRecyclerView.setHasFixedSize(true);                              //让RecycleView保持固定的大小  
        mLayoutManager = new LinearLayoutManager(MainActivity.this);      //设置布局管理器
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);                               //设置RecycleAdapter




RecycleViewAdapter
       onCreateViewHolder 方法:
       创建ViewHolder
            View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.layout_item, parent, false);
            MyViewHolder vh=new MyViewHolder(v,mClickListener);
            return vh;
       参数:
       parent  ViewGroup: The ViewGroup into which the new View will be added after it is bound to an adapter position.
                             绑定适配器后添加的新视图   
       viewType  int:       The view type of the new View.
                             新视图类型




       onBindViewHolder 方法:
       在指定的位置添加数据
          holder.mTextView.setText(mDataset.get(position));
       参数:
       holder   VH: The ViewHolder which should be updated to represent the contents of the item at the given position in the data set.
                   在指定位置 更新item内容的viewholder
       position   int: The position of the item within the adapter's data set.
                   adapter数据设置的item的位置 
       payloads   List: A non-null list of merged payloads. Can be empty list if requires full update. 
                   非空list(merged payloads有效载荷) ,如果要求全部更新的话,list可以为空
       
       getItemCount
       返回在adapter中item的总数
          return mDataset.size();


       可以自定义ViewHolder去继承ViewHolder
       public MyViewHolder(View itemView) {
            super(itemView);
            mImageView= (ImageView) itemView.findViewById(R.id.img_num);    
       }
在Java中,Apache HttpClient是一个流行的库,用于创建HTTP客户端并执行各种HTTP请求。如果你需要通过HttpClient实现接口关联,通常会涉及到以下几个步骤: 1. **添加依赖**:首先,你需要在你的项目中引入HttpClient的依赖。如果你使用Maven,可以在pom.xml文件中添加: ```xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.x.y</version> <!-- 根据最新版本替换 --> </dependency> ``` 2. **创建Client对象**:创建`CloseableHttpClient`实例,这是执行HTTP请求的基本入口点: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); ``` 3. **构建请求**:根据接口需求,你可以选择`HttpGet`, `HttpPost`等不同类型的请求: ```java HttpGet get = new HttpGet("https://example.com/api/endpoint"); HttpPost post = new HttpPost("https://example.com/api/register"); ``` 4. **发送请求并处理响应**: ```java HttpResponse response; try { response = httpClient.execute(get); // 或者 httpClient.execute(post) // 获取响应码和内容 int statusCode = response.getStatusLine().getStatusCode(); HttpEntity entity = response.getEntity(); String responseBody = EntityUtils.toString(entity); // 根据状态码和实际业务处理响应 } catch (IOException e) { // 捕获并处理异常 } finally { try { httpClient.close(); // 确保关闭连接 } catch (IOException e) { // log error } } ``` 5. **处理接口关联**:如果接口有特定的数据结构或认证需求,你可能需要解析JSON或其他格式的响应,并将其映射到对应的Java对象上。可以借助如Jackson或Gson这样的库来完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值