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

之前用 python ,现在临时学 android 写应用,觉得 java 好死板啊。一个 http post json 请求, python 几行的事, java 20 行才只是完成 http 部分... json 解析又得好多行...

  •  
  •   gamexg · 2015-02-23 14:46:20 +08:00 · 6147 次点击
    这是一个创建于 3552 天前的主题,其中的信息可能已经有所发展或是发生改变。
    HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(url);
    
                try {
                    httppost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    
                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
                    nameValuePairs.add(new BasicNameValuePair("*", *));
                    nameValuePairs.add(new BasicNameValuePair("*", *));
                    nameValuePairs.add(new BasicNameValuePair("*", *));
                    nameValuePairs.add(new BasicNameValuePair("*", *));
                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8));
    
                    HttpResponse response;
                    String result = null;
                    response = httpclient.execute(httppost);
    
    
                    if (response.getStatusLine().getStatusCode() == 200) {
    
                        HttpEntity entity = response.getEntity();
                        result = EntityUtils.toString(entity, HTTP.UTF_8);
                    }
                    Log.i(TAG, "result:" + result);
                    return result;
    
    
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
    第 1 条附言  ·  2015-02-23 15:35:45 +08:00
    搜索发现了 apache HttpClient4.2 Fluent API 很舒服,自己仿着封装一个。奇怪 android 就是用的 apache HttpClient ,但是却没有 Fluent API ,可能是版本旧。

    android 和后台通信的地方还不少,全部用原来的写法能烦死了。
    27 条回复    2015-02-25 03:43:09 +08:00
    funky
        1
    funky  
       2015-02-23 14:49:15 +08:00   ❤️ 1
    易读性与代码长度的取舍。
    njulzp
        2
    njulzp  
       2015-02-23 14:54:31 +08:00   ❤️ 1
    用 c 试试
    Mirana
        3
    Mirana  
       2015-02-23 14:55:06 +08:00   ❤️ 1
    用继承或者代理模式
    xudshen
        4
    xudshen  
       2015-02-23 14:59:01 +08:00   ❤️ 1
    请自行搜索library再来吐槽
    lincanbin
        5
    lincanbin  
       2015-02-23 15:04:23 +08:00   ❤️ 2
    不封装怪谁啊?
    像大学生初学C语言,会花个几百行来实现一个introsort,你说python一行sort就实现了然后把C语言批判一番?
    Rocko
        6
    Rocko  
       2015-02-23 15:05:01 +08:00 via Android   ❤️ 2
    你这是在走路,请找个代步工具。
    mthli
        7
    mthli  
       2015-02-23 15:17:44 +08:00 via Android   ❤️ 2
    gamexg
        8
    gamexg  
    OP
       2015-02-23 15:47:12 +08:00
    retrofit 看着更厉害。

    感谢大家,先离开下,回来后细看。
    fashioncj
        9
    fashioncj  
       2015-02-23 17:22:07 +08:00
    这个也就是一次完成的东西。
    fankay
        10
    fankay  
       2015-02-23 17:46:42 +08:00 via Android
    你可以试试okhttp
    sandideas
        11
    sandideas  
       2015-02-23 17:56:08 +08:00
    @lincanbin C也有qsort
    wdlth
        12
    wdlth  
       2015-02-23 18:18:39 +08:00   ❤️ 1
    表面上你用Python是几行,但是Python实现这个功能得写多少行?这是前人栽树,后人乘凉。
    Troevil
        13
    Troevil  
       2015-02-23 18:23:41 +08:00
    java 封装完不也是一两行的事
    MASAILA
        14
    MASAILA  
       2015-02-23 18:29:27 +08:00 via Android
    http://loopj.com/android-async-http/
    我比较喜欢用这个
    kzzhr
        15
    kzzhr  
       2015-02-23 18:42:45 +08:00
    首先要学会java程序员的思维。。。

    不是想黑,只是说一下场景下的区别:
    我们现在需要一个把一个单词转大写
    C程序员:枚举修改就好了
    Java程序员:找包啊!
    我们现在需要排个序
    C程序员:快排分分钟搞定
    Java程序员:找包啊!
    zhengkai
        16
    zhengkai  
       2015-02-23 20:10:02 +08:00   ❤️ 1
    Java 是典型的码农语言,就是主要为了给管事的看的,而不是为了给干活的写的

    偶尔饭后闲扯,有同事是精通 Java、能从字节码 debug 的,跟我说,你敢说我大 Java 不好?!我说这个语言,要是让二三十个人去写,你定义好接口,那二三十个人填空,你肯定觉得 Java 是非常好的语言,但大部分写 Java 的都是那二三十个人里头的,我之前在一个公司呆过几个月,那里大部分人都是干了很多年对日外包,说他们的工作量可以精确到小时的,在我看来这真的是流水线的工人,干了好多年,还什么都不知道,只会填空。同事听完想了想,说从你这个角度说是对的
    pandada8
        17
    pandada8  
       2015-02-23 20:26:28 +08:00
    @kzzhr Python: 内置啊(笑
    petercai
        18
    petercai  
       2015-02-23 20:32:06 +08:00 via Android
    有个玩意儿叫Jython
    msg7086
        19
    msg7086  
       2015-02-23 21:39:17 +08:00
    @pandada8 Ruby: →_→
    lch21
        20
    lch21  
       2015-02-23 21:52:29 +08:00   ❤️ 1
    当年学X Window编程,200多行开了个窗口,打印了一行Hello world,激动得热泪盈眶
    tuoxie007
        21
    tuoxie007  
       2015-02-23 22:45:02 +08:00
    吐槽Java有个蛋用呢,去Google楼下举牌子啊
    Tiande
        22
    Tiande  
       2015-02-23 23:01:23 +08:00 via iPhone
    @zhengkai 高级搬砖工的感觉…
    fatea
        23
    fatea  
       2015-02-23 23:04:12 +08:00 via iPhone
    用Volley啊,现在官方教程都提这个。
    fatea
        24
    fatea  
       2015-02-23 23:05:57 +08:00 via iPhone
    像楼主例子里面的小数据不用Volley干嘛呢?什么都不用管,也不用考虑线程了。
    schezuk
        25
    schezuk  
       2015-02-24 15:33:39 +08:00
    想起几年前在书店里看见的《Win32ASM编程》了……
    还有纯C用Win32 SDK写Form
    miao1007
        26
    miao1007  
       2015-02-24 15:41:49 +08:00   ❤️ 1
    Volley ,Retrofit, async-http都是很好的库。

    总的来说就是就是 布置项目 -> 找开源 - > 找包 -> 修改 -> 完事
    andybest
        27
    andybest  
       2015-02-25 03:43:09 +08:00
    @MASAILA 这几天没上QQ吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1966 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:23 · PVG 00:23 · LAX 08:23 · JFK 11:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.