目录

为什么要学习RxJava?

什么是响应式编程?

RXJava思维下载图片


为什么要学习RxJava?

  • 改变思维(响应式编程思想),编程效率提升

官网:ReactiveX

什么是响应式编程?

【根据上一层的响应,来影响下一层的变化】

响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播

RXJava思维下载图片

第一步:加入依赖包

//RxAndroid的依赖包
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
//RxJava的依赖包
implementation 'io.reactivex.rxjava2:rxjava:2.0.7'

第二步:开启网络权限

<!--开启网络权限-->
<uses-permission android:name="android.permission.INTERNET"/>

第三步:页面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"><!--下载图片--><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下载图片"android:onClick="loadDownImage" /><!--Rxjava来显示图片--><ImageViewandroid:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>

第四步:RXJava下载/显示图片(MainActivity代码)

package com.example.rxjavastudy;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;public class MainActivity extends AppCompatActivity {//网络图片的链接地址private final String PATH = "https://image.baidu.com/search/down?tn=download&word=download&ie=utf8&fr" +"=detail&url=https%3A%2F%2Fgimg2.baidu.com%2Fimage_search%2Fsrc%3Dhttp%253A%252F%252Fpic1.win4000." +"com%252Fwallpaper%252F7%252F57ec72987b140.jpg%26refer%3Dhttp%253A%252F%252Fpic1.win4000.com%26ap" +"p%3D2002%26size%3Df9999%2C10000%26q%3Da80%26n%3D0%26g%3D0n%26fmt%3Dauto%3Fsec%3D1663469947%26t%3Df1" +"cb7822473a7224f3ae863f7d7082ee&thumburl=https%3A%2F%2Fimg2.baidu.com%2Fit%2Fu%3D791640261%2C44080610%" +"26fm%3D253%26fmt%3Dauto%26app%3D120%26f%3DJPEG%3Fw%3D1280%26h%3D800";//弹出加载框(正在加载中.....)private ProgressDialog progressDialog;//ImageView控件,用来显示图片private ImageView image;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化ImageViewimage=findViewById(R.id.image);}public void loadDownImage(View view) {//起点-创建被观察者 通过just完成起点流向终点的操作//TODO 第二步Observable.just(PATH)//需求 1:图片下载//TODO 第三步.map(new Function<String, Bitmap>() {@Overridepublic Bitmap apply(String s) throws Exception {try {Thread.sleep(2000);//睡眠2sURL url=new URL(PATH);//url//请求服务器HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();httpURLConnection.setConnectTimeout(5000);//设置请求时间为5s//拿到服务器的响应码int responseCode =  httpURLConnection.getResponseCode();if(responseCode==HttpURLConnection.HTTP_OK){//如果拿到200InputStream inputStream=httpURLConnection.getInputStream();//获取输入流Bitmap bitmap= BitmapFactory.decodeStream(inputStream);//解析输入流return bitmap;}} catch (Exception e) {e.printStackTrace();}return null;}})//需求2:给图片加水印//TODO 第四步.map(new Function<Bitmap, Bitmap>() {@SuppressLint("ResourceAsColor")@Overridepublic Bitmap apply(Bitmap bitmap) throws Exception {Paint paint=new Paint();paint.setColor(R.color.black);//颜色paint.setTextSize(150);//文字大小Bitmap bitmap1=drawTextToBitmap(bitmap,"这是一个水印",paint,100,150);return bitmap1;}})//需求3:打印日志//TODO 第五步.map(new Function<Bitmap, Bitmap>() {@Overridepublic Bitmap apply(Bitmap bitmap) throws Exception {System.out.println("日志:"+bitmap);return bitmap;}})//给上面的分配异步线程.subscribeOn(Schedulers.io())//图片显示终点分配andorid主线程.observeOn(AndroidSchedulers.mainThread())//TODO 导火索 点燃了 开始执行//关联起点和终点 创建观察者,并进行订阅.subscribe(new Observer<Bitmap>() {@Override//终点-订阅成功//TODO 第一步public void onSubscribe(Disposable d) {//显示加载框progressDialog = new ProgressDialog(MainActivity.this);progressDialog.setTitle("图片正在加载中...");progressDialog.show();}@Override//上一层给的响应//TODO 第六步public void onNext(Bitmap bitmap) {//显示到控件上image.setImageBitmap(bitmap);}@Override//发生异常public void onError(Throwable e) {}@Override//链条结束//TODO 第七步public void onComplete() {//隐藏加载框if(progressDialog != null){progressDialog.dismiss();}}});}//水印private final Bitmap drawTextToBitmap(Bitmap bitmap, String text, Paint paint, int paddingLeft, int paddingTop){Bitmap.Config bitmapConfig = bitmap.getConfig();paint.setDither(true);//获得更清晰的图片采样paint.setFilterBitmap(true);//过滤if(bitmapConfig == null){bitmapConfig = Bitmap.Config.ARGB_8888;}Bitmap bitmap1 = bitmap.copy(bitmapConfig, true);Canvas canvas = new Canvas(bitmap1);canvas.drawText(text,paddingLeft,paddingTop,paint);return bitmap1;}}

第五步:效果

rxjava思维下载图片

RXJava思维下载图片相关推荐

  1. java下载图片压缩包_java压缩文件和下载图片示例

    本文实例为大家分享了java压缩文件和下载图片示例,供大家参考,具体内容如下 主页面index.xml 项目的主页 主页主页 湖南长沙 发布方式一...... 页面内容压缩演示--gzip 下载图片 ...

  2. Jsoup下载图片报错:UnsupportedMimeTypeException

    2019独角兽企业重金招聘Python工程师标准>>> 使用Jsoup下载图片时,报错:不支持MimeType异常. Response request = Jsoup.connect ...

  3. 测试Python下载图片的三种方法

    简 介: 通过Python软件包对网络URL图片链接进行下载,可以加快后期处理.本文测试了urllib, request两个软件包对图片进行下载效果.如果图片原网页有了防止下载机制,是无法下载图片. ...

  4. scrapy (2)下载图片及存储信息

    例1:scrapy项目的使用(利用item收集抓取的返回值) 1.创建scrapy项目 1 2 3 4 5 6 scrapy startproject booklist New Scrapy proj ...

  5. Android开发之根据Service的生命周期特点后台连接网络下载图片(源代码分享)

    上一章讲到Service在后台启动后不会自动销毁掉,其销毁的方式有两种一个是在外部使用stopService()方法,一个就是在继承Service的类下调用stopSelf(),那么应该何时调用sto ...

  6. 解决下载图片不论图像多大总是模糊的问题

    下载图片一定要点击进入图片,不然你下载的只是缩略图 点击原始尺寸,或者点击下载即可下载真实尺寸的图片 转载于:https://www.cnblogs.com/500m/p/10710762.html

  7. 多线程 python tcp 图片_Python第四周之网络编程TCP (服务器/客户端; 线程下载图片;线程版服务器和客户端(单人、多人)) UDP...

    # 网络编程 # 计算机网络, 把多台独立自主的计算机,连接到网络,实现资源的共享 # Internet网,(互联网)eniac 1946美国大学第一台电子计算机 # # 一个TCP报文除了包含要传输 ...

  8. python下载图片、已知url_python实现通过URL下载图片到本地服务器

    import os import urllib.request image_url = 'http://img.jingtuitui.com/759fa20190115144450401.jpg' f ...

  9. c++ url下载图片

    /* @author:CodingMengmeng @theme:C++根据图片url下载图片 @time:2017-1-6 22:58:00 @blog:http://www.cnblogs.com ...

最新文章

  1. 第十六届全国大学生智能车竞赛广东赛区线上竞赛方案
  2. Jbuilder9 + WebLogic8.1的基本配置
  3. arduino与DS1302时钟调试失败的分析
  4. [转]编程语言中的 鸭子模型(duck typing)
  5. 如何在Windows上安装Angular:Angular CLI,Node.js和构建工具指南
  6. oracle日期的sql,Oracle中一些和日期有关的SQL查询
  7. 计算机一级题库百度云0,全国计算机等级考试一级题库完整.pdf
  8. vue+elementUI 打印pdf文件
  9. 怎样才可以关掉Mac电脑开机启动项?
  10. vue中实现打包时代码压缩
  11. maltab datenum函数与正则表达式巧用:逐日数据转为逐月数据、日序转月序
  12. 深度详解新iPad八核GPU
  13. 简述计算机软件与硬件,简述计算机硬件与软件的关系。 - 问答库
  14. 【精】JAVA各大厂问题汇总-HELLO XF
  15. iPhone音频开发之:转换和录音(第二部分)
  16. MPU6050读取数据FIFO溢出问题
  17. 6个部件组成一个圆球_小圆球6块魔方视频教程(六块塑料片拼球图视频)
  18. 51单片机模拟数字键盘输入以及图像显示+Proteus仿真
  19. 最新华农c语言教材答案,华农C语言题目及答案完整版
  20. UPS蓄电池放电时间的计算

热门文章

  1. 基于android的宠物app
  2. 【MATLAB基础绘图第10棒】绘制各种面积图
  3. 用FastJson将JSON字符串转Json
  4. Student学生表(学号,姓名、性别、年龄、组织部门),Course 课程表(编号,课程名称),Sc选课表(学号,课程编号,成绩) a、写一个SQL语句,查询选修了计算机原理的学生学号和姓
  5. 关于安卓APP加固基础的总结
  6. ABAP创建销售订单BAPI示例
  7. js跳转页面并使用post传参
  8. 火柴人联盟2服务器维护,火柴人联盟2黑店卖什么 黑店系统详解
  9. 阿里CEO张勇首谈商业未来:大数据将成新能源
  10. Java设计模式:桥接模式