新手学习Rotrofit+RxJava网络请求以及Material Design风格
来源:互联网 发布:想开淘宝店取名字好呢 编辑:程序博客网 时间:2024/05/17 02:25
先贴出代码地址吧:https://github.com/Pr-Jiang/NewsAPP
近期,宣讲会也不多了,受 饿了么 sofish 的点醒,确实应该静下心来做点实际的东西。
在寝室一个人,两天半的时间,做了这一个算是比较完整的项目吧。也参考了github上的开源项目进行学习~
之前只是浅显的看了一些RxJava的文章,推荐关于RxJava最友好的文章,这一次实战,也切实体会到了Retrofit+RxJava 进行网络请求的强大,特别是在于线程切换上,真的是厉害~~
上一下预览图片吧,闪屏页面由于是动图,gif图片太大,这边不支持,所以有感兴趣的可以去github看一下
也希望大家可以star一下,帮助我在校招中寻找自己理想的offer~
小鱼在此谢过了~
这是主界面:
采用了MaterialDesign风格,使用EasyRecyclerView,利用CardView将item进行包裹
数据来 自天行数据
private void easyGetDatas() { Retrofit retrofit = new Retrofit.Builder() .baseUrl(NewsFragment.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) /* 添加Gson转换器 */ .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) /* 添加RxJava适配器 */ .build(); NewsService newsService = retrofit.create(NewsService.class); newsService.getNewsDatas(NewsFragment.APIKEY, "10", page) .subscribeOn(Schedulers.io()) /* 指定Observable执行所在的线程 */ .map(new Func1<News, List<News.NewslistBean>>() { @Override public List<News.NewslistBean> call(News news) { return news.getNewslist(); } }) .observeOn(AndroidSchedulers.mainThread()) /* 将后边的线程切换到主线程 */ .subscribe(new Subscriber<List<News.NewslistBean>>() { @Override public void onCompleted() { easyRecyclerView.setRefreshing(false); } @Override public void onError(Throwable e) { Snackbar.make(easyRecyclerView, R.string.network_error, Snackbar.LENGTH_LONG).show(); } @Override public void onNext(List<News.NewslistBean> newslistBeen) { adapter.addAll(newslistBeen); } }); page++; }
新闻详情:
瀑布流图片:
同样采用EasyRecyclerView
数据来自Gank.io
大图:
采用Picasso进行图片的加载
Picasso加载全尺寸图片质量高于Glide
Glide优势在于gif图片的加载以及按照ImageView大小加载相应尺寸的图片
图片保存使用RxJava~
代码如下:
private void savePicture(final Context context, final String id) { Observable.create(new Observable.OnSubscribe<Bitmap>() { @Override public void call(Subscriber<? super Bitmap> subscriber) { Bitmap bitmap = null; try { /* Picasso加载图片质量高于Glide */ bitmap = Picasso.with(context).load(bitmapUrl).get(); } catch (IOException e) { subscriber.onError(e); } if (bitmap == null) { subscriber.onError(new Exception("无法下载图片")); } subscriber.onNext(bitmap); subscriber.onCompleted(); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Bitmap>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Bitmap bitmap) { File appDir = new File(Environment.getExternalStorageDirectory(), "NewsAPP"); String pictureName = id + ".jpg"; File file = new File(appDir, pictureName); try { FileOutputStream outputStream = new FileOutputStream(file); /* 断言,true则继续执行,false则java.lang.AssertionError */ assert (bitmap != null); /** * 压缩图片 * @param quality 压缩率 100 表示不压缩 */ bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); outputStream.flush(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } /* 通知图库更新 */ Uri uri = Uri.fromFile(file); context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); Toast.makeText(context, "图片已保存至" + appDir.getAbsolutePath() + "文件夹", Toast.LENGTH_SHORT).show(); } }); }
对了!记得添加网络访问和存储器写权限!
1 0
- 新手学习Rotrofit+RxJava网络请求以及Material Design风格
- Material Design 风格 结合使用 Retrofit RxJava Jsoup Mvp 模式的一款资讯类 学习 app
- Material Design风格浅析
- Coordinatorlayout---Material Design风格
- 一款 Material Design 风格的 AndroidRank 干货学习客户端
- Android CardView 和Material Design风格设计学习
- Material Design风格登录注册
- Android Material design设计风格
- 自定义Material Design风格ProgressDialog
- Material Design风格SearchView实现
- Material Design风格之Snackbar
- Material Design 风格引导页
- Material Design+RxJava+Retrofit+MVP App
- Toobar学习总结以及Material Design简单介绍
- Material design学习笔记
- Material Design学习
- Material Design学习地址
- Material Design学习摘录
- 1622-5 孔富晨 总结《201年11月9日》 【连续第40日总结】
- WPF将控件导出为图片
- linux远程文件传输命令
- 在velocity中使用日期格式化
- 第十周 项目 1 - 建立二叉树算法库(二叉树的链式存储及基本运算 )
- 新手学习Rotrofit+RxJava网络请求以及Material Design风格
- Windows 名称解析机制探究及缺陷利用
- HASHMAP原理
- ES6中的模板字符串和新XSS Payload
- Android Wear 开发-创建第一个卡片
- 你不知道的javascript章节总结
- Spring Aop cglib代理方法调度顺序
- Wampserver图标黄色解决
- JAVA语言中创建对象后,调用对象中的方法,则方法中的输出语句会自动运行