無標題文檔

Volley 使用笔记

Google I/O 2013 上就讲到了 Volley。当时并没还有在意这个类库,直到看了某项目的源代码后,发现这个东西值得推荐。

Volley 这个库的官方介绍是:

Volley is a library that makes networking for Android apps
easier and most importantly, faster.

不是很严谨的讲,Volley 就是个包含了很多封装功能的网络请求工具类。使用这个工具类有个优势就是可以节省很多在请求以及缓存方面的开发时间。

优势

[相比其他网络载入类库](https://github.com/nostra13/Android-Universal-Image-Loader
),Volley 的优势官方主要提到如下几点:

  1. 队列网络请求,并自动合理安排何时去请求。
  2. 提供了默认的磁盘和内存等缓存(Disk Caching & Memory Caching)选项。
  3. Volley 可以做到高度自定义,它能做到的不仅仅是缓存图片等资源。
  4. Volley 相比其他的类库更方便调试和跟踪。

基本使用

引入 Volley 很简单。使用 git 下载代码到本地

git clone https://android.googlesource.com/platform/frameworks/volley

然后引入到项目中就可以使用了。

Volley 简单的来讲主要由两个类控制:

  1. Request Queue
  2. Request

Volley 的「Hello,World」示例代码:

// 实例化 Request Queue
RequestQueue queue = Volley.newRequestQueue(context);

// 实例化 Request
String url = "<remote url>";
JsonObjectRequest jsonObjRequest =
    new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            // ...
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            // ...

        }
    });

然后剩下要做的事情就是把这个 Request 扔到 Queue 里面即可:

queue.add(jsonObjRequest);

缓存图片资源

缓存图片资源 Volley 提供了个自定义的 NetworkImageView 继承自 ImageView 。它的优势就是载入远程图片几乎可以用「傻瓜」形容,例如:

mNetworkImageView.setImageUrl(imageUrl, new ImageLoader());

其中 ImageLoader 最重要的一个参数就是 ImageLoader.ImageCache 它控制是否需要请求网络获取数据。因此,我们可以将这个 Class 配合 LruCache 以及 DiskLruCache 用来内存和磁盘缓存。

主要方法

@Override
public Bitmap getBitmap(String url) {
    Bitmap data = mLruCache.get(url);
    if (data == null) {
        try {
            data = mDiskLruCache.get(key);
            if (data != null) {
                mLruCache.put(key, data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    } 

    return data;
}

这样子,就可以很清晰得把内存缓存和磁盘缓存之间的关系建立和链接起来了。

资源&参考

- eof -

使用命令行截取 Android 设备的界面

在进行 Android 开发的时候有时候需要截图,通常我的土办法就是打开 DDMS 然后再截取,这样有点不好就是效率不高每次都需要刷新然后手工去保存。

搜索了下,发现 Linux 下已经有现成的解决方案。原理就是使用使用 Android 自带的命令行 screencap 然后通过 adb 传输过来。

整条 Shell 命令其实很简单

adb shell screencap -p | sed 's/\r$//' > outputs.png

但发现在我的 Mac 无法运行。检查了以后发现是 GNU sed 和 BSD sed 命令间有不兼容的情况。我的解决方案就是使用 brew 安装 gsed(有更好的解决方案的同学欢迎指出)。

brew install gnu-sed

然后简单得修改下上面的 Shell 脚本:

adb shell screencap -p | gsed 's/\r$//' > ~/Desktop/`date +%Y%m%d%H%M%S.png`

这样子每次运行这个脚本就能把 Android 设备的截图放到桌面了,并自动命名。

UPDATE .1

原博客的作者也给出了在 Mac 下的解决方案,他是使用 Perl :

adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png

这样子对于没有安装 brew 的同学是个好消息。

-- EOF --

又一款 Android 应用:「读知乎」

NOTE:因为没有得到「知乎」官方的许可,这款应用长期无法在国内市场上架,因此暂停开发。
同时也不保证能够正常读取「知乎」条目,在这里我表示遗憾和抱歉。

同时开放源代码,参见:https://github.com/feelinglucky/iZhihu

--

慢慢的从刷「微博」的习惯改成了刷「知乎」,相对比而言我觉得这比在「微博」上更有意义。

「读知乎」这个应用首先是 小虎 开发对应的 iOS 版,然后 小虎 说应该有个 Android 版本,刚好本人会一点点的 Android 开发,于是就有了这个应用。

Preference Screen

写这个应用没有花很多时间,甚至线框图都没有画过根据 iOS 版照葫芦画瓢就做了出来。不过慢慢的发现我需要更多的功能,然后慢慢得在正面叠加功能。

于是:

  • 支持简体整体换转功能。知乎有很大部分的正体中文用户,无损转换他们产出的内容当然更符合我等大陆居民的阅读习惯。
  • 支持段落首字缩进、「传统中文引号」等二次排版。对于这些明显带有个人品好的选项自己打开或者关闭吧。
  • 支持自定义字体阅读。个人非常喜欢「冬青黑体」(Hiragino Sans GB) ,当然由于应用体积和版权等问题不可能打包进应用中,因此就有了这个选项。

等等的这些功能是典型的个人需求驱动的开发,但愿这些繁杂的功能没有让其他使用者茫然无措。

--

从着手开发到现在已经过了两个月时间,对于某些是用过的东西有了更多的印象。在这里说下我这里的心得吧,仅仅是些个人的观点:

知乎

知乎上的内容很好,甚至我有点强迫症式的会刷知乎上的条目(好吧,我承认这是强迫症的表现之一)。

从知乎站点的页面设计上说,知乎的页面其实并不适合阅读。所以,每次阅读我感兴趣的条目时,都要「Command + +」增大字体阅读。

同时,知乎目前并没有开放的 API(据说也没有具体的计划开放 API)。这对于开发者而言非常的不友好,但知乎官方对应的「知乎」、「知乎日报」等应用都采用了知乎自己的私有接口。

其实这让「读知乎」在数据源方面的问题非常的尴尬。一方面「读知乎」的数据是取自知乎站点,并保持同步更新;另一方面,知乎没有明确的条款说明这些数据的版权以及使用方面的等问题。

BAE

「读知乎」的后台使用的是 BAE(百度应用引擎)http://developer.baidu.com/bae ,总体来讲这是个非常不错的应用平台。由于「读知乎」用户数量的增长,我们也体验了下 BAE 平台的收费服务,总体而言体验方面并不差。

对于以前传统的自己建立服务器然后写服务器端的应用,这些应用引擎提供了更加稳定和强大的空间,对此考虑以后的 B/S 应用可以尝试迁移到类似的平台,费用算起来其实并不高。

--

Main Screenshots

PS,有关源代码方面。本来是想计划开放源代码的,但由于知乎的私有接口以及其他方面的等问题,暂时就先不开源了,这里表示下抱歉。

下面是「读知乎」的下载渠道:

-- EOF --

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章