为什么 Android 设计这么复杂? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Cheez
V2EX    Android

为什么 Android 设计这么复杂?

  •  1
     
  •   Cheez
    PRO
    2019-08-11 15:54:23 +08:00 via Android 19306 次点击
    这是一个创建于 2322 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想在 APP 登陆,保存一下 cookies,都得实现好几个类。我在 python 和 node.js 都只需要几十行代码。

    我用的是 okhttp,是因为这个库本身比较复杂吗?有没有像 python 的 requests 一样轻松简单的库

    36 条回复    2019-08-12 15:29:13 +08:00
    eminemcola
        1
    eminemcola  
       2019-08-11 16:09:15 +08:00
    首先 OKHTTP 和 Android SDK 无关…
    pdog18
        2
    pdog18  
       2019-08-11 16:12:54 +08:00
    okhttp 设置 cookiejar 就好了,然后看你想如何保存,这个需要你来自定义,其实也可以几行代码就好了。
    yinzhili
        3
    yinzhili  
       2019-08-11 17:37:26 +08:00
    这是因为 java 语言相对比较繁琐
    你要去用 ObjectiveC 做 iOS 开发也会发现,复杂度也是高于 py 和 node 的,到时候岂不是要来抱怨 [iOS 设计这么复杂]
    iPhoneXI
        4
    iPhoneXI  
       2019-08-11 18:06:38 +08:00 via Android
    试试 kotlin ?
    rb6221
        5
    rb6221  
       2019-08-11 18:10:56 +08:00 via iPhone
    你说的复杂是代码行数吗?
    如果是的那怪 java 吧
    如果不是的,只能说明你不熟悉客户端开发的理念
    hoyixi
        6
    hoyixi  
       2019-08-11 18:12:07 +08:00
    你说的是一回事吗,Py 和 node 都是服务器端,Android 是客户端

    Web 用浏览器登录,浏览器帮你做了不少工作;如果自己实现客户端,维护一些状态、且和服务器保持一致,当然你得自己写代码
    ochatokori
        7
    ochatokori  
       2019-08-11 18:26:58 +08:00 via Android
    其实你只是觉得 java 干嘛都得搞个类和 pyjs 这些动态语言相比麻烦得不是一点(我就是这样
    wakan190
        8
    wakan190  
       2019-08-11 18:31:02 +08:00 via Android
    python 主要面向过程的,会直接些
    HuHui
        9
    HuHui  
       2019-08-11 19:21:07 +08:00
    api 实现的粒度更细吧
    AlvaIM
        10
    AlvaIM  
       2019-08-11 19:22:51 +08:00
    封装好了的话都不会麻烦, 主要是封装得不行
    locoz
        11
    locoz  
       2019-08-11 19:25:31 +08:00 via Android
    @eminemcola #1 Python 的 requests 库也是第三方库,也和 Python 标准库无关
    locoz
        12
    locoz  
       2019-08-11 19:27:27 +08:00 via Android
    复杂不是 Android 的问题,而是 Java 的问题,语言设计者的理念不同导致了 Java 写起来会比 Python 繁琐一些。
    luozic
        13
    luozic  
       2019-08-11 19:29:20 +08:00 via iPhone
    Java 自己的坑 ,可以试试 kotlin
    lihongjie0209
        14
    lihongjie0209  
       2019-08-11 19:30:35 +08:00
    首先这个和安卓没关系

    其次这是设计理念的问题, 脚本语言适合一次性的简短的任务, 当然直接撸最好了. 稍微复杂的一点的任务, 需要多人维护的, 需要扩展性的, 不管是什么语言都需要 OOP 和设计模式那一套.
    godlovesxcjtest
        15
    godlovesxcjtest  
       2019-08-11 19:34:15 +08:00 via Android
    保存 cookie 有一个 github 项目,一行代码基本上就能搞定
    BBCCBB
        16
    BBCCBB  
       2019-08-11 20:51:31 +08:00
    okohttp 只是一个基础库, 你可以用包装了他的库,比如 retrofit 或者 feign.
    就想 python 里的 requests 页包装了 urllib3. 如果你用 urllib3 自己撸,也有很多事情要做.
    YUyu101
        17
    YUyu101  
       2019-08-12 00:23:45 +08:00   1
    没办法,类多一是写的人爽,思路清晰,二是扩展的人爽,只要继承实现,其他的逻辑都不用动,如果只想简单用用就会很不爽,因为你为了一个小功能而付出巨大的时间成本搞清他是怎么实现的
    Building
        18
    Building  
       2019-08-12 00:32:44 +08:00 via iPhone
    正如你所说的,你觉得 Python 和 node.js 比较简单,是因为复杂的别人都在库里帮你写好了。
    jinliming2
        19
    jinliming2  
       2019-08-12 02:03:54 +08:00 via iPhone
    Java 强类型,很多地方限制,所以比较繁琐。
    py、js 弱类型,所以相对比较容易实现,把类型推导交给解释器。
    语言面向的方向不同而已。
    MMMMMMMMMMMMMMMM     20
    MMMMMMMMMMMMMMMM  
       2019-08-12 05:08:37 +08:00
    Java 想要舒服的写代码,要备好一堆 code generator
    wdv2ly
        21
    wdv2ly  
       2019-08-12 07:30:49 +08:00 via Android
    拿平台和语言比?那你可以用 py 开发 android,试试复杂度
    jaskle
        22
    jaskle  
       2019-08-12 08:05:45 +08:00 via Android
    规范意味着复杂,随意意味着简单,怎么能跟一个强类型语言比这个……所以我选择 nodejs
    HenryW
        23
    HenryW  
       2019-08-12 08:08:15 +08:00 via iPhone
    语言库的实现和使用逻辑跟系统有什么关系…
    pythonnoob
        24
    pythonnoob  
       2019-08-12 08:17:20 +08:00 via iPhone
    @jinliming2 python 并不是弱类型,js 才是
    itskingname
        25
    itskingname  
       2019-08-12 08:20:17 +08:00 via iPhone
    @jinliming2 纠正一下,Python 是动态强类型语言。
    godoway
        26
    godoway  
       2019-08-12 08:27:18 +08:00 via Android
    与其说复杂,不如说为这个库做得这么简单,
    hbolive
        27
    hbolive  
       2019-08-12 09:07:45 +08:00
    PHP 保存 cookies 只要一句话,PHP 骄傲了吗?
    其实吧,也没那么难.jpg
    yidinghe
        28
    yidinghe  
       2019-08-12 09:12:26 +08:00 via Android
    unforgiven
        29
    unforgiven  
       2019-08-12 09:41:49 +08:00
    @luozic 这个和语言都没关系,一个是自己实现一个是 call 别人的 api 当然代码量不一样
    zagfai
        30
    zagfai  
       2019-08-12 11:00:18 +08:00
    @wakan190 ???你自己用 python ?
    xloger
        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 封装的简易库,可以实现一行代码实现,内部原理也跟上面的实现差不多。

    所以我觉得,是应用场景与目标不同,不存在优劣与繁琐的问题。
    lwj871731342
        32
    lwj871731342  
       2019-08-12 12:25:48 +08:00
    SharedPreferences 存一下...对 OkHttp 来说也只是个设置的事吧...
    AndroidEngineer
        33
    AndroidEngineer  
       2019-08-12 13:24:56 +08:00
    浏览器帮你做的 cookie 操作,客户端你要自己实现,这就是区别
    nnnToTnnn
        34
    nnnToTnnn  
       2019-08-12 13:58:33 +08:00
    先不说 okhttp,这个库提供很多方便的地方,其次我觉得你这个问题应该换下,改成:“为什么我的技术这么差” ,你这个功能说实话无非就是 socket 编程,Java 只是重于设计,轻实现的
    madtcsa
        35
    madtcsa  
       2019-08-12 14:18:15 +08:00
    Android 设计的很复杂么?没觉得?碎片化的坑倒是多。
    mouyase
        36
    mouyase  
       2019-08-12 15:29:13 +08:00 via Android
    觉得代码复杂那是语言和库的锅
    觉得数据存储复杂那是平台的锅
    不管怎么样就是复杂那是你的锅
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     912 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 19:40 PVG 03:40 LAX 11:40 JFK 14:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86