GithubHelp home page GithubHelp logo

laucherish / purezhihud Goto Github PK

View Code? Open in Web Editor NEW
543.0 38.0 164.0 14.21 MB

基于RxJava+Retrofit+OkHttp实现的纯净知乎日报客户端

Home Page: https://github.com/laucherish/PureZhihuD

Java 92.99% CSS 7.01%

purezhihud's Introduction

纯净知乎日报

最纯净的知乎日报客户端。运行快,无广告,无社交,省流量。

  • 下载地址

酷安
http://www.coolapk.com/apk/io.github.laucherish.purezhihud

百度
http://shouji.baidu.com/soft/item?docid=9159620

豌豆荚
http://www.wandoujia.com/apps/io.github.laucherish.purezhihud

实现的功能

已完成

  • 日报列表显示
  • 日报详情显示
  • 错误界面处理
  • 下拉加载更多
  • 已读内容标记
  • 已读内容缓存
  • 离线下载
  • 滑动返回
  • 分享
  • 夜间模式

一、为什么做这个?

自己每天都阅读知乎日报,心中理想的客户端应该是这样:软件运行速度快,没有广告干扰,没有多余的社交元素,可以缓存数据节省流量,只提供最纯净的阅读体验!

为什么不自己做一个呢?于是就有了纯净知乎日报。

软件采用RxJava + Retrofit + OkHttp框架实现,遵循Material Design,界面简单干净,运行速度快,自动离线缓存,节省流量,对于页面加载及错误等都做了处理,可以作为自己以后开发的一个模板。

二、软件截图

  • 首页列表界面

首页列表

  • 内容详情界面

日报详情

  • 滑动返回

滑动返回

  • 关于界面

关于界面

三、依赖库

感谢这些开源库的大神们

四、用到的知识点

Retrofit — Getting Started and Create an Android Client
https://futurestud.io/blog/retrofit-getting-started-and-android-client

给 Android 开发者的 RxJava 详解
http://gank.io/post/560e15be2dca930e00da1083

五、声明

应用中展示的所有内容均搜集自互联网,若内容有侵权请联系作者进行删除处理。本应用仅用作分享与学习。

purezhihud's People

Contributors

laucherish avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

purezhihud's Issues

希望

整体感觉还是不错, 也有一定的参考价值,但是希望还是能充实一些功能,包括个人中心等一些必要的功能也充实下最好。另外,也可以将Dagger2这个框架加进去,充实对象的注入过程。

列表快速滑动中,出现崩溃。

我的机器是Nexus5:

03-24 20:12:31.377 1227-7114/io.github.laucherish.purezhihud E/AndroidRuntime: FATAL EXCEPTION: RxCachedThreadScheduler-58
Process: io.github.laucherish.purezhihud, PID: 1227
java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add onError handling.
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:60)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: rx.exceptions.OnErrorNotImplementedException
at rx.Observable$27.onError(Observable.java:7923)
at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:159)
at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:120)
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:191)
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:162)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 
Caused by: java.net.SocketTimeoutException
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:484)
at java.net.PlainSocketImpl.-wrap0(PlainSocketImpl.java)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
at okio.Okio$2.read(Okio.java:139)
at okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
at okhttp3.internal.http.Http1xStream.readResponse(Http1xStream.java:184)
at okhttp3.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:125)
at okhttp3.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:723)
at okhttp3.internal.http.HttpEngine.access$200(HttpEngine.java:81)
at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:708)
at com.facebook.stetho.okhttp3.StethoInterceptor.intercept(StethoInterceptor.java:59)
at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:681)
at io.github.laucherish.purezhihud.network.manager.RetrofitManager$1.intercept(RetrofitManager.java:97)
at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:681)
at okhttp3.internal.http.HttpEngine.readResponse(HttpEngine.java:563)
at okhttp3.RealCall.getResponse(RealCall.java:241)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198)
at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:203)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:187)
at io.github.laucherish.purezhihud.network.manager.RetrofitManager$1.intercept(RetrofitManager.java:97)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:187)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160)
at okhttp3.RealCall.execute(RealCall.java:57)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:177)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:111)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:92)
at rx.Observable$2.call(Observable.java:162)
at rx.Observable$2.call(Observable.java:154)
at rx.Observable$2.call(Observable.java:162)
at rx.Observable$2.call(Observable.java:154)
at rx.Observable.unsafeSubscribe(Observable.java:8098)
at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 

请问,我做缓存的时候问什么会崩溃

我也是用okhttp+rxjava+retrofit 对数据进行缓存,但是如果没网的时候没有缓存就去读取数据就会返回504,然后就各种崩溃。。请问我该怎么办。。能留下qq联系方式吗?兄弟

您好

您好 我最近在研究rxjava_retrofit20_okhttp 但是发现很多小问题 就是当我的观察者Observable 接收到是空字符串 (我需要接收的是集合:List) 这样就任何数据都接不到了 当然这也要和服务器很好的搭配 但是在客户端这里却很难做一些处理 请问您是如何处理的 如果您不介意的话 我想和您在一起开发 研究
QQ 2215719882

webview的夜间模式实现

String html = "<html><head>" + css + "</head><body>" + content.getBody() + "</body></html>";

替换为

String html = "<html><head>" + css + "</head><body class=\"night\">" + content.getBody()  + "</body></html>";

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.