惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
MongoDB | Blog
MongoDB | Blog
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
D
Docker
S
Secure Thoughts
B
Blog
M
MIT News - Artificial intelligence
P
Privacy International News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
Arctic Wolf
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Tenable Blog
Last Week in AI
Last Week in AI
A
About on SuperTechFans
T
Tor Project blog
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客
L
Lohrmann on Cybersecurity
Security Latest
Security Latest
P
Proofpoint News Feed
有赞技术团队
有赞技术团队
P
Privacy & Cybersecurity Law Blog
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
小众软件
小众软件
宝玉的分享
宝玉的分享
量子位
Forbes - Security
Forbes - Security
T
Threatpost
Google DeepMind News
Google DeepMind News
T
Threat Research - Cisco Blogs
H
Help Net Security
Help Net Security
Help Net Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
T
Troy Hunt's Blog
SecWiki News
SecWiki News
I
InfoQ
C
Cyber Attacks, Cyber Crime and Cyber Security
Stack Overflow Blog
Stack Overflow Blog

MoonLab

VSCode + OpenOCD 远程调试开发STM32 Clangd + VSCode使用方法 Keil5 编译错误 error: call to undeclared function '__enable_irq' BTSNOOP is FUN! 算法 - 前缀和 2025蓝桥杯赛后总结 三星ZFold 3改造 JavaScript 逆向 Steam 登录二维码 快速求解平方根倒数算法 Protobuf Android设备安装Debian成为BT下载服务器 [双系统] Windows 更新摧毁了我的Linux系统 Reading List Golang embed 使用问题 Hexo博客自动备份插件 云盘备份支持 通过汇编分析栈、函数调用 esp&ebp Git push 出现 permisson denied error 403 坑:Litepal save方法返回true却没有保存 Android Shizuku源码分析 第二篇 Android Shizuku源码分析 Android 监听第三方Activity的一举一动 Android笔记#1 View的事件分发机制解析 使用Hexo Hello World Ubnutu 无法启动网易云音乐 - 总结 Windows 好软推荐 | 这一定是良心软件 typecho - http转https 如何评价Android P MoonLab MoonLab MoonLab 关于 项目
知乎日报的问题
LingC · 2019-07-05 · via MoonLab

📦 由AI生成的摘要
作者在暑假期间开始开发一个第三方的知乎日报客户端,使用MVP架构。遇到了一些问题,如全局异常处理和JSON解析,选择使用Picasso加载图片。为了解决WebView中图片宽度过大的问题,作者通过JavaScript调整图片大小。最终,作者完成了基本的加载和查看功能,并在GitHub上分享了代码。尽管开发过程充满挑战,作者仍然享受这个过程。

没想到吧!本鸽子想起自己的博客啦!

暑假到了,感觉时间跟不要钱一样,没有了时间概念了233

我实在没啥可写的,就随便说说这两天干了啥吧

昨天我开始写一个第三方的知乎日报客户端

因为太无聊了,就随便搞搞吧。用的是这个API

简单说一下之前遇到的问题吧,以及开发的过程

架构

用的是MVP,也就是Model, View, Presenter

感觉有点麻烦,其实现在有点后悔了,写起来太无聊啦

最开始当然是疯狂写写写写接口,创建Activity

后面则是疯狂用用用用别人的轮子

全局异常处理

自己写了个全局异常处理实现Thread.UncaughtExceptionHandler这个接口。

然后再把自己的Application搞上去,在MyApplication中把默认的ExceptionHandler给搞下去!

在uncaughtException方法中写入处理异常的代码,这里是不能使用AlertDialog的!!!

我是直接跳转到专门的ExceptionActivity处理,这样用户体验就更棒了(其实没啥用)

但但但但但是!!!

不知道为啥在uncaughtException中Throwable的printStackTrace方法失效了,我也没有深究,也懒得管啦

JSON解析

没啥意思,就那样JSONOBJECT, JSONARRAY,懒得用别人的轮子233

应用中需要加载图片,我并没有考虑Glide,我使用了OkHttp框架,而Picasso也用到了OkHttp,况且Picasso更轻量,在某种情况下个人感觉Picasso比Glide更好用

图片宽度太宽啦

这个Webview的图片超过了屏幕的宽度,我在网上查了一下 WenView 图片自适应

找到了一个方法,就是加载JavaScript,这可能是一个本方法但管用

像我这种五线水平,也就只能这样惹QAQ

webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                String javascript = "javascript:function ResizeImages() {" +
                        "var myimg,oldwidth;" +
                        "var maxwidth = document.body.clientWidth;" +
                        "for(i=0;i <document.images.length;i++){" +
                        "myimg = document.images[i];" +
                        "if(myimg.width > maxwidth){" +
                        "oldwidth = myimg.width;" +
                        "myimg.width = maxwidth;" +
                        "}" +
                        "}" +
                        "}";
                view.loadUrl(javascript);
                view.loadUrl("javascript:ResizeImages();");
            }
        });

Html显示

推荐一个整理json的工具:http://www.bejson.com/

在文章接口中,它会返回一个html代码,也就是文章内容,例如

html有点长,不放了

Emmmmmm,你懂我意思就行了,很多这种内容型项目的语法都是用html的,而不是markdown

这里我遇到了一个坑,最开始我以为只需要用TextView显示html就行了

但实际结果很不尽人意,图片显示的效果很差,图片都太小了

这是一个很严重的问题

我开始怀疑人生…

想到用Webview加载,但是害怕竹篮打水一场空,就分析了一下官方的知乎日报

似乎的确是使用WebView的,这是返回的json

{
      body: "<div class="main-wrap content-wrap">...</div>",
      image_source: "Yestone.com 版权图片库",
      title: "深夜惊奇 · 朋友圈错觉",
      image: "http://pic3.zhimg.com/2d41a1d1ebf37fb699795e78db76b5c2.jpg",
      share_url: "http://daily.zhihu.com/story/4772126",
      js: [ ],
      recommenders": [
          { "avatar": "http://pic2.zhimg.com/fcb7039c1_m.jpg" },
          { "avatar": "http://pic1.zhimg.com/29191527c_m.jpg" },
          { "avatar": "http://pic4.zhimg.com/e6637a38d22475432c76e6c9e46336fb_m.jpg" },
          { "avatar": "http://pic1.zhimg.com/bd751e76463e94aa10c7ed2529738314_m.jpg" },
          { "avatar": "http://pic1.zhimg.com/4766e0648_m.jpg" }
      ],
      ga_prefix: "050615",
      section": {
          "thumbnail": "http://pic4.zhimg.com/6a1ddebda9e8899811c4c169b92c35b3.jpg",
          "id": 1,
          "name": "深夜惊奇"
      },
      type: 0,
      id: 4772126,
      css: [
          "http://news.at.zhihu.com/css/news_qa.auto.css?v=1edab"
      ]
  }

可以看到有一条 css,官方的知乎日报显示的效果,与网页不同

看来就是加载了这个css吧,我还以为有什么其他高科技呢!

毕竟效率第一嘛,这样做的好处也是有的

我们只需要在 Model 层中对 javabean 的正文属性做一些修改就可以了

最后加载css后发现整个世界都不一样了

(事实上最后加载css后发现,知乎日报提供的css根本就不用考虑 img 标签的宽度太大,人家自懂帮忙处理好的 QAQ)

(而且加载css还会给官方的知乎日报app留白)

这其中不难发现 Android客户端 与负责 Web 的开发人员之间的合作,这很常见(当然也可能是一位全栈工程师吧)

Tips: 如果WebView

但我还没感受过这种合作呢,哭惹

现在完成了简单的加载和查看

只做完了六分之一吧,甚至更少(哭哭)

1

2

3

4

2020更新

基本上已经完成了,主要是写完了分页加载,垃圾代码随便看看吧:Github (https://github.com/HelloLingC/zhihu-daily-open)