A Full-Stack mobile app, including Android & Server, Simple-Poem 简诗. You can write poem in graceful & traditional Chinese style.

Overview

JianShi 简诗

A Full-Stack mobile app, including Android side & Server side, Simple-Poem 简诗. You can write poem in graceful & traditional Chinese style. It supports signup & login, data sync with server, offline data storage, screenshot share etc.

一款优雅的中国风Android App,包括Android端和Server端,支持登录注册,数据云端同步,离线数据存储和截屏分享等功能。

中文说明

Google Play

下载地址: Fir.im

Technology JianShi used

Android side

Jianshi depends on the most popular Android libraries to build Stable and Clean structure.

  • Database: DBFlow to manage sqlite database;
  • Network: OkHttp3 & Retrofit2, and Stetho to debug http requests;
  • Rx: RxJava & RxAndroid;
  • Dependency Inject: Dagger2;
  • Logging: Timber;
  • Image loading: Picasso;
  • Crash monitor: Crashlytics;
  • other: Eventbus.

Thanks Square for their great libraries.

Server side

Jianshi depends on Python & Flask.

The server architecture is:

  • www layer: used to receive all http request, process parameters, and call logic layer api for furthure process;
  • logic layer: used to process heavy service logic, when there are database actions, it will call db layer;
  • db layer: used to wrap our database related actions.

Android UI

Chinese Blog for jianshi

如何在一天之内完成一款具备cool属性的Android产品_简书

Contributor

We build Android & Server together for JianShi. wingjay, RayPan.

Development History

I use my extra time for this project development, so the development process doesn't go very fast.

  • [2016/11/06] Configure aliyun cloud server; Deploy application by jenkins; Setup Nginx & gunicorn; Finish unit-test for signup & data sync logic
  • [2016/10/30] Design for signup & login; Screenshot for share; Other cool features
  • [2016/10/25] Data sync between android and server; Improve server error handling function & config mechanism. [Server+Android]
  • [2016/09/03] User managment in server side and Signup & Login flow in Android side. [Server+Android]
  • [2016/08/25] Migrate from LeanCloud to Apache + Mysql + wsgi + Flask and build my own server framework. [Server]
  • [2016/08/20] Build server side framework. Using LeanCloud & Python. [Server]
  • [2016/08/18] Integrate Dagger Retrofit2 OkHttp3 RxJava etc. [Android]

Inspired By

《Producter》

License

Apache

You might also like...
Todo List Application is an android app that allows building a todo list and basic todo items management functionality including adding new items, editing and deleting an existing item
Todo List Application is an android app that allows building a todo list and basic todo items management functionality including adding new items, editing and deleting an existing item

Todo List Application is an android app that allows building a todo list and basic todo items management functionality including adding new items, editing and deleting an existing item

LeeCo is an awesome app for (including unlock) problems, solutions, discuss(from leetcode) and comments.
LeeCo is an awesome app for (including unlock) problems, solutions, discuss(from leetcode) and comments.

LeeCo LeeCo is an awesome app for algorithem problems(including unlock), solutions, discuss(from leetcode) and comments. #中文文档 README-ZH.md #Download

FairEmail is easy to set up and works with virtually all email providers, including Gmail, Outlook and Yahoo!
FairEmail is easy to set up and works with virtually all email providers, including Gmail, Outlook and Yahoo!

Downloads • Privacy • Support • License FairEmail Fully featured, open source, privacy oriented email app for Android FairEmail is easy to set up and

Kalam is an app that gives people a chance to write their stories on the app.
Kalam is an app that gives people a chance to write their stories on the app.

Kalam is an app that gives people a chance to write their stories on the app. This app gives a good story for the story readers and gives good story writers a chance to write their own story

Android app which fetches a sample movies list to display. Built using Kotlin and latest Android tech stack, with an approach to clean architecture.
Android app which fetches a sample movies list to display. Built using Kotlin and latest Android tech stack, with an approach to clean architecture.

movies-sample-app This is an Android app which fetches a sample movies list to display. Built using Kotlin and latest Android tech stack, with an appr

✨ Social network app made with Android Compose, full Kotlin, Firebase Authentication, Storage and Firestore 🚀
✨ Social network app made with Android Compose, full Kotlin, Firebase Authentication, Storage and Firestore 🚀

Your friends, for real. Share daily random moments with your friends and discover who they really are. ✨ Instant Instant is a social media actually un

A mobile application that allows you to get random information every time you enter the application.
A mobile application that allows you to get random information every time you enter the application.

Knowledge Repository A mobile application that allows you to get random information every time you enter the application. Google Play Store : Screensh

MaterialYouFileExplorer - A file explorer with the style of Material You
MaterialYouFileExplorer - A file explorer with the style of Material You

A file explorer with the style of Material You. Use this library to select files/directories quickly.

How-Many-People-Are-In-Space - Do you wonder how many people are in space? Now you can check instantly with this app

How Many People Are In Space? Do you wonder how many people are in space right n

Comments
  • Gradle sync 报错

    Gradle sync 报错

    Gradle sync failed: Could not find any matches for im.fir:sdk:latest.integration as no versions of im.fir:sdk are available. Required by: android:app:unspecified Consult IDE log for more details (Help | Show Log)

    opened by nowisgood 1
  • redPointViewBgColor 属性设置后报错

    redPointViewBgColor 属性设置后报错

    redPointViewBgColor 属性设置后报错,这里设置color,GradientDrawable drawable = (GradientDrawable) containerView.getBackground(); drawable.setColor(getResources().getColor(colorRes)); 会报错

    opened by xingag 1
  • Log in error

    Log in error

    An unhandled exception occurred while logging in when the network is not connected.

    32055 E null login failure 2019-01-14 14:50:33.445 32055 E null java.net.UnknownHostException: Unable to resolve host "jianshi.wingjay.com": No address associated with hostname 2019-01-14 14:50:33.445 32055 E null at java.net.InetAddress.lookupHostByName(InetAddress.java:470) 2019-01-14 14:50:33.445 32055 E null at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 2019-01-14 14:50:33.445 32055 E null at java.net.InetAddress.getAllByName(InetAddress.java:215) 2019-01-14 14:50:33.445 32055 E null at okhttp3.Dns$1.lookup(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.connection.RouteSelector.nextProxy(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.connection.RouteSelector.next(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.connection.StreamAllocation.findConnection(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.connection.StreamAllocation.newStream(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.connection.ConnectInterceptor.intercept(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.cache.CacheInterceptor.intercept(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.BridgeInterceptor.intercept(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.logging.HttpLoggingInterceptor.intercept(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at com.wingjay.jianshi.network.GlobalRequestInterceptor.intercept(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.internal.http.RealInterceptorChain.proceed(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.RealCall.getResponseWithInterceptorChain(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at okhttp3.RealCall.execute(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at retrofit2.OkHttpCall.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$RequestArbiter.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at rx.internal.operators.OperatorSubscribeOn$1$1$1.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at rx.Subscriber.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at rx.internal.operators.OperatorSubscribeOn$1$1.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at rx.Subscriber.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at rx.internal.operators.OnSubscribeLift.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at rx.internal.operators.OnSubscribeLift.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at rx.Observable.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at rx.internal.operators.OperatorSubscribeOn$1.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.a(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at rx.internal.schedulers.ScheduledAction.run(Unknown Source) 2019-01-14 14:50:33.445 32055 E null at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 2019-01-14 14:50:33.445 32055 E null at java.util.concurrent.FutureTask.run(FutureTask.java:237) 2019-01-14 14:50:33.445 32055 E null at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:154) 2019-01-14 14:50:33.445 32055 E null at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269) 2019-01-14 14:50:33.445 32055 E null at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 2019-01-14 14:50:33.445 32055 E null at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 2019-01-14 14:50:33.445 32055 E null at java.lang.Thread.run(Thread.java:833) 2019-01-14 14:50:33.445 32055 E null Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname) 2019-01-14 14:50:33.445 32055 E null at libcore.io.Posix.android_getaddrinfo(Native Method) 2019-01-14 14:50:33.445 32055 E null at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55) 2019-01-14 14:50:33.445 32055 E null at java.net.InetAddress.lookupHostByName(InetAddress.java:451) 2019-01-14 14:50:33.445 32055 E null ... 49 more 2019-01-14 14:50:33.445

    opened by allentianxxx 0
Releases(v2.0)
Android Chinese TTS Engine Base On Tensorflow TTS , use for TfLite Models Test。安卓离线中文TTS引擎,在TensorflowTTS基础上开发,用于TfLite模型测试。

Chinese TTS TF Lite 介绍 使用Kotlin + JetPack Compose + Tensorflow Lite开发的TTS引擎,可以完全离线使用。 可选两种模型:FastSpeech和Tacotron,这两种模型均来自TensorFlowTTS 文字转拼音方法来自:Tenso

benjamin wan 116 Jan 2, 2023
A full-stack application showing the power 💪 of KOTLIN. Entire android app + backend Apis written in Kotlin 🔥

Gamebaaz ?? A full-stack application showing the power ?? of KOTLIN. Entire android app + backend Apis written in Kotlin ?? Android Backend Jetpack Co

Sarnava Konar 85 Nov 17, 2022
Shot is an Android project you can use to write screenshot for your apps in a simple and friendly way

Shot is an Android project you can use to write screenshot for your apps in a simple and friendly way. What is this? Shot is a Gradle plugin and

Pedro Gómez 1k Dec 30, 2022
An app which displays questions from Stack Exchange from it's api. Can search questions with tags as well. Uses MVVM architecture, dependency injection, coroutines, retrofit2 for network calls

Stack Exchange app What the app does? Shows a list of trending questions from stack exchange api Can search for the desires question. Can add tags to

null 0 Apr 27, 2022
Sunlight Apk - Sunlight App where You can decide Your Mood and Relative suggestions of what you can do will be displayed

Sunlight_Apk This Is a App where You can decide Your Mood and Relative suggestio

Jadu 1 Feb 5, 2022
AnimApp is an app that recommends you random anime and you can add it to your favourite if you like it.

papb-team6 AnimApp is an app that recommends you animes and you can add it to your favourite if you like it. Team members: Firdaus Bisma Suryakusuma (

Gilang Adhitama Putra 1 Mar 9, 2022
Android Studio project wrapper around the Elixir TodoApp Desktop app to run on Android including the Erlang runtime

TodoApp Android: An Android Sample App This Android Studio project wraps the Desktop Sample App to run on an Android phone. How to build & run Install

elixir-desktop 78 Dec 10, 2022
Sample app demonstrating interop between Jetpack Compose and the Android UI toolkit, including SurfaceView

Wake Me Up Wake Me Up is a sample app showcased in the Google I/O 2021 Developer Keynote that demonstrates interoperability between Jetpack Compose an

Romain Guy 174 Dec 5, 2022
SimpleToDo is an android app that allows building a todo list and basic todo items management functionality including adding new items, editing and deleting an existing item.

SimpleToDo is an android app that allows building a todo list and basic todo items management functionality including adding new items, editing and deleting an existing item.

null 0 Jan 3, 2022