本来想先写反编译系列,但是拿别人的应用(如360优化大师等)来作为案列,感觉并不适合,因此在反编译系列之前,先做一个简单的应用,其中包括:FastJson,Volley等库,同时实现Volley库的封装。
该项目的目的是作为反编译系列的素材。
创建项目
到下一步选择新建一个Empty Activity,然后Next,出现如下界面,直接Finish。(这一步不重要,也可以在项目建好后自己生成。)
在Android Stuido中,我比较喜欢Project视图,更接近文件系统目录结构。
Android Studio项目目录结构介绍 - OPEN 开发经验库
引入Volley
既然该项目中用到Volley,那学习地址必不可少了。
网络请求库Volley详解 - 泡在网上的日子
这里引用最新的Volley,将下面一行代码加入到VolleyDemo/app/build.gradle中的dependencies里。
compile 'com.mcxiaoke.volley:library:1.0.19'
Volley 简单使用
既然是有网络请求,那么别忘了给AndroidManifest.xml加上网络权限。
<uses-permission android:name="android.permission.INTERNET" />
在MainActivity中添加如下方法:
private void initData() {
String url = "http://www.baidu.com/";
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
Log.d("demo", "response = " + s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("demo", "onErrorResponse: " + volleyError.getMessage());
}
});
Volley.newRequestQueue(this).add(request);
}
onCreate方法中调用即可。
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
}
编译运行发现流程已经跑通。代码比较简单,不过多解释。
数据来源
通过上面的验证,数据流已经OK,现在要开始拿真正的数据来做事情了。
因为项目比较简单,单独做个服务端比较浪费资源。因此这里我用Android应用架构之Retrofit使用文章中提到的 http://ip.taobao.com/service/getIpInfo.php?ip=21.22.11.33 来作为实例使用。
发出一个简单的http GET请求,即可获得服务器返回的数据,在浏览器上访问同理。但是,如果碰到需要Post请求的接口怎么办?如果通过写代码调用API,是可以做到,但是个人感觉太麻烦了。因此这里提一下api测试中的一种便利工具:PostMan。
PostMan
分别在浏览器和浏览器和Postman上请求上面的接口
通过该图可以发现Postman的功能还是很强大的,无论是请求类型,设置Header,Params都非常方便。推荐大家使用该工具来做接口测试。
现在将代码中的url设置为
http://ip.taobao.com/service/getIpInfo.php?ip=21.22.11.33。
编译运行,打出log:
04-02 17:08:33.403 13181-13181/? D/demo: response = {"code":0,"data":{"country":"\u7f8e\u56fd","country_id":"US","area":"","area_id":"","region":"","region_id":"","city":"","city_id":"","county":"","county_id":"","isp":"","isp_id":"","ip":"21.22.11.33"}}
至此,通过volley调用上面的接口已经完成。