我想在 APP 登陆,保存一下 cookies,都得实现好几个类。我在 python 和 node.js 都只需要几十行代码。
我用的是 okhttp,是因为这个库本身比较复杂吗?有没有像 python 的 requests 一样轻松简单的库
1
eminemcola 2019-08-11 16:09:15 +08:00
首先 OKHTTP 和 Android SDK 无关…
|
2
pdog18 2019-08-11 16:12:54 +08:00
okhttp 设置 cookiejar 就好了,然后看你想如何保存,这个需要你来自定义,其实也可以几行代码就好了。
|
3
yinzhili 2019-08-11 17:37:26 +08:00
这是因为 java 语言相对比较繁琐
你要去用 ObjectiveC 做 iOS 开发也会发现,复杂度也是高于 py 和 node 的,到时候岂不是要来抱怨 [iOS 设计这么复杂] |
4
iPhoneXI 2019-08-11 18:06:38 +08:00 via Android
试试 kotlin ?
|
5
janus77 2019-08-11 18:10:56 +08:00 via iPhone
你说的复杂是代码行数吗?
如果是的那怪 java 吧 如果不是的,只能说明你不熟悉客户端开发的理念 |
6
hoyixi 2019-08-11 18:12:07 +08:00
你说的是一回事吗,Py 和 node 都是服务器端,Android 是客户端
Web 用浏览器登录,浏览器帮你做了不少工作;如果自己实现客户端,维护一些状态、且和服务器保持一致,当然你得自己写代码 |
7
ochatokori 2019-08-11 18:26:58 +08:00 via Android
其实你只是觉得 java 干嘛都得搞个类和 pyjs 这些动态语言相比麻烦得不是一点(我就是这样
|
8
wakan190 2019-08-11 18:31:02 +08:00 via Android
python 主要面向过程的,会直接些
|
9
HuHui 2019-08-11 19:21:07 +08:00
api 实现的粒度更细吧
|
10
AlvaIM 2019-08-11 19:22:51 +08:00
封装好了的话都不会麻烦, 主要是封装得不行
|
11
locoz 2019-08-11 19:25:31 +08:00 via Android
@eminemcola #1 Python 的 requests 库也是第三方库,也和 Python 标准库无关
|
12
locoz 2019-08-11 19:27:27 +08:00 via Android
复杂不是 Android 的问题,而是 Java 的问题,语言设计者的理念不同导致了 Java 写起来会比 Python 繁琐一些。
|
13
luozic 2019-08-11 19:29:20 +08:00 via iPhone
Java 自己的坑 ,可以试试 kotlin
|
14
lihongjie0209 2019-08-11 19:30:35 +08:00
首先这个和安卓没关系
其次这是设计理念的问题, 脚本语言适合一次性的简短的任务, 当然直接撸最好了. 稍微复杂的一点的任务, 需要多人维护的, 需要扩展性的, 不管是什么语言都需要 OOP 和设计模式那一套. |
15
godlovesxcjtest 2019-08-11 19:34:15 +08:00 via Android
保存 cookie 有一个 github 项目,一行代码基本上就能搞定
|
16
BBCCBB 2019-08-11 20:51:31 +08:00
okohttp 只是一个基础库, 你可以用包装了他的库,比如 retrofit 或者 feign.
就想 python 里的 requests 页包装了 urllib3. 如果你用 urllib3 自己撸,也有很多事情要做. |
17
YUyu101 2019-08-12 00:23:45 +08:00 1
没办法,类多一是写的人爽,思路清晰,二是扩展的人爽,只要继承实现,其他的逻辑都不用动,如果只想简单用用就会很不爽,因为你为了一个小功能而付出巨大的时间成本搞清他是怎么实现的
|
18
Building 2019-08-12 00:32:44 +08:00 via iPhone
正如你所说的,你觉得 Python 和 node.js 比较简单,是因为复杂的别人都在库里帮你写好了。
|
19
jinliming2 2019-08-12 02:03:54 +08:00 via iPhone
Java 强类型,很多地方限制,所以比较繁琐。
py、js 弱类型,所以相对比较容易实现,把类型推导交给解释器。 语言面向的方向不同而已。 |
20
MMMMMMMMMMMMMMMM 2019-08-12 05:08:37 +08:00
Java 想要舒服的写代码,要备好一堆 code generator
|
21
wdv2ly 2019-08-12 07:30:49 +08:00 via Android
拿平台和语言比?那你可以用 py 开发 android,试试复杂度
|
22
jaskle 2019-08-12 08:05:45 +08:00 via Android
规范意味着复杂,随意意味着简单,怎么能跟一个强类型语言比这个……所以我选择 nodejs
|
23
HenryW 2019-08-12 08:08:15 +08:00 via iPhone
语言库的实现和使用逻辑跟系统有什么关系…
|
24
pythonnoob 2019-08-12 08:17:20 +08:00 via iPhone
@jinliming2 python 并不是弱类型,js 才是
|
25
itskingname 2019-08-12 08:20:17 +08:00 via iPhone
@jinliming2 纠正一下,Python 是动态强类型语言。
|
26
godoway 2019-08-12 08:27:18 +08:00 via Android
与其说复杂,不如说为这个库做得这么简单,
|
27
hbolive 2019-08-12 09:07:45 +08:00
PHP 保存 cookies 只要一句话,PHP 骄傲了吗?
其实吧,也没那么难.jpg |
28
yidinghe 2019-08-12 09:12:26 +08:00 via Android
|
29
unforgiven 2019-08-12 09:41:49 +08:00
@luozic 这个和语言都没关系,一个是自己实现一个是 call 别人的 api 当然代码量不一样
|
31
xloger 2019-08-12 11:25:22 +08:00
这是封装程度不同的原因。楼主所说的保存 cookies,我这边创建 okHttpClient 的相关代码如下:
val inDiskCookieStore = InDiskCookieStore(XInit.applicationContext) private var cookieHandler: CookieManager = CookieManager(inDiskCookieStore, CookiePolicy.ACCEPT_ALL) private val okHttpClient = OkHttpClient.Builder() .cookieJar(JavaNetCookieJar(cookieHandler)) InDiskCookieStore 是我自己创建的,cookieJar 和 cookieManager 的作用感兴趣可以自行了解,直接使用 okhttp 自己实现的这两个类即可。而 InDiskCookiesStore 里我做了什么呢,就是继承了 CookieStore 接口,实现了用 SharedPreferences 持久化存储 cookies 而已。 这个流程复杂么?不算复杂但是对于新手的确是繁琐了点。这个流程有必要么?我觉得是有的,不然一个网络库凭啥帮你实现具体的持久化存储。 而如果想像其他框架一样简单地一句话调用,网上肯定有很多基于 okhttp 封装的简易库,可以实现一行代码实现,内部原理也跟上面的实现差不多。 所以我觉得,是应用场景与目标不同,不存在优劣与繁琐的问题。 |
32
lwj871731342 2019-08-12 12:25:48 +08:00
SharedPreferences 存一下...对 OkHttp 来说也只是个设置的事吧...
|
33
AndroidEngineer 2019-08-12 13:24:56 +08:00
浏览器帮你做的 cookie 操作,客户端你要自己实现,这就是区别
|
34
nnnToTnnn 2019-08-12 13:58:33 +08:00
先不说 okhttp,这个库提供很多方便的地方,其次我觉得你这个问题应该换下,改成:“为什么我的技术这么差” ,你这个功能说实话无非就是 socket 编程,Java 只是重于设计,轻实现的
|
35
madtcsa 2019-08-12 14:18:15 +08:00
Android 设计的很复杂么?没觉得?碎片化的坑倒是多。
|
36
mouyase 2019-08-12 15:29:13 +08:00 via Android
觉得代码复杂那是语言和库的锅
觉得数据存储复杂那是平台的锅 不管怎么样就是复杂那是你的锅 |