V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Cheez
V2EX  ›  Android

为什么 Android 设计这么复杂?

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

    我想在 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 ?
    janus77
        5
    janus77  
       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   ·   实用小工具   ·   1435 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:28 · PVG 01:28 · LAX 09:28 · JFK 12:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.