使用Retrofit和淘宝IP地址库查询IP
来源:互联网 发布:怎么查看淘宝信用等级 编辑:程序博客网 时间:2024/05/17 02:32
概述
Retrofit官方主页
Retrofit是为Java和Android打造的一个类型安全的HTTP客户端API。使得对Web方面知之甚少的开发者也可以方便地使用网络请求,省略了TCP复杂的过程,可以实现快速开发,高效使用。这篇博客记录了使用Retrofit从淘宝IP地址库查询IP地址信息的经过。免费的API,不需要注册,安利一波。
开发环境
Android Studio 1.5.1
Windows 10 64 bit
和github的正常稳定连接
开动
1.新建一个AS项目
2.修改xml文件
不需要什么UI,一个EditText,一个Button,一个TextView就好。可以把TextView弄得大一点,不然下面空一块好丑。
3.修改gradle依赖文件
要打开那个app目录下(Module:app后缀)
在里面添加以下几行:[添加前最好去检查一下更新,把版本号换成最新的]
compile 'com.squareup.retrofit2:converter-gson:2.0.0' compile 'com.squareup.retrofit2:retrofit:2.0.0'
解释一下这两行代码吧,第一行的信息在converter-gson ,从字面意思是“一个叫gson的转换器”,其实它的意思就是字面意思。gson是google的一个解析json的工具,可以把json的键值对映射到一个类里的对象。看过ip.taobao.com 就知道,服务器传回的是json数据,我们就是使用gson解析json。当然你也可以根据喜好选择其他的工具。第二行,很显然,自然就是建立和Retrofit框架的亲密关系了。
然后sync一下,依赖就添加好了。Retrofit相关文件会从网址上自己下好,用这段时间去在Activity里关联处理xml里的基本组件是个不错的选择。
代码时间
1.在manifest文件中声明网络权限。
<uses-permission android:name="android.permission.INTERNET" />
2.根据API信息适配框架
请求接口(GET):
/service/getIpInfo.php?ip=[ip地址字串]
返回信息大概就是这样子的:
已使用在线格式化工具格式化
{ "code": 0, "data": { "ip": "210.75.225.254", "country": "中国", "area": "华北", "region": "北京市", "city": "北京市", "county": "", "isp": "电信", "country_id": "86", "area_id": "100000", "region_id": "110000", "city_id": "110000", "county_id": "-1", "isp_id": "100017" }}
首先处理请求接口
import retrofit2.Call;import retrofit2.http.Field;import retrofit2.http.FormUrlEncoded;import retrofit2.http.POST;public interface RetrofitService { @FormUrlEncoded @POST("service/getIpInfo.php") Call<IPItem> queryIP(@Field("ip") String ip);}
创建返回数据对象
然后根据返回信息造个类,内容是code和data。然后再为data造个类。类里面大概city, region, isp之类的,后面是字符串就把类型改成字符串。不用全部都弄上,我们并不是需要所有的信息。最后alt+insert为它们添加get方法。
IPItem.java
public class IPItem { private int code;//status code private IPData data; public IPData getData() { return data; } public int getCode() { return code; }}
IPData.java
public class IPData { private String region;//province private String city; private String country; private String isp;//Internet Service Provider private String country_id; public String getCountry() { return country; } public String getCountry_id() { return country_id; } public String getRegion() { return region; } public String getCity() { return city; } public String getIsp() { return isp; } public String toString() { return isp; }}
在OnClickListener里,首先
Retrofit retrofitIP = new Retrofit.Builder().baseUrl("http://ip.taobao.com/") .addConverterFactory(GsonConverterFactory.create()).build();
然后绑定Service
RetrofitService queryService = retrofitIP.create(RetrofitService.class); //RetrofitService.class是适配接口的类名。
然后通过Call发起请求:
Call<IPItem> call = queryService.queryIP(ip);call.enqueue(new Callback<IPItem>() {……}
然后直接自动补全出 onResponse && onFailure 方法
在Response里直接调用body()方法就可以将内容填充到类里了。
IPItem ipItem = response.body();
下面是草民实现的一个版本:
btnQuery.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final String ip = editIP.getText().toString(); Retrofit retrofitIP = new Retrofit.Builder().baseUrl("http://ip.taobao.com/") .addConverterFactory(GsonConverterFactory.create()).build(); if (ip.isEmpty()) Log.e(TAG, "IP is Empty"); else Log.i(TAG, ip); RetrofitService queryService = retrofitIP.create(RetrofitService.class); Call<IPItem> call = queryService.queryIP(ip); call.enqueue(new Callback<IPItem>() { @Override public void onResponse(Call<IPItem> call, Response<IPItem> response) { IPItem ipItem = response.body(); StringBuilder result = new StringBuilder(); if (0 == ipItem.getCode()) { IPData data = ipItem.getData(); if (!data.getCountry_id().equals("IANA")) { result.append("IP:"); result.append(ip); result.append("\n"); result.append("Location:"); result.append(data.getCountry()); result.append(data.getRegion()); result.append(data.getCity()); result.append(" "); result.append(data.getIsp()); tvInfo.setText(result); } else tvInfo.setText("未分配或者内网IP"); } } @Override public void onFailure(Call<IPItem> call, Throwable t) { Log.e(TAG, "QUERY FAILURE"); } }); } });
写在后面
到此,基本的使用就这样结束了。希望大家同时去阅读一下官方的API文档,获取更广泛的使用。
- 使用Retrofit和淘宝IP地址库查询IP
- 获取客户IP并查询IP的地理位置(使用淘宝IP地址库)
- 淘宝ip地址查询接口
- 很方便的IP查询接口:淘宝IP地址库
- 分享淘宝的IP地址库查询接口
- 淘宝IP地址库采集
- 淘宝的ip地址库
- 淘宝IP地址库采集
- 获取淘宝IP地址库
- 使用淘宝的IP查询API实现IP地址省市展示
- Java联网查询IP地址归属,使用腾讯ip分享计划接口以及淘宝API接口
- 淘宝网查询IP地址信息的服务地址
- 淘宝IP地址库,提供API
- JAVA 调用淘宝IP地址库API
- IP地址和MAC地址互相查询
- php通过淘宝API查询IP地址归属等信息
- 通过淘宝IP地址库获取IP位置
- 通过淘宝IP地址库获取IP位置
- 作业:C++作业3
- Dialog
- Servlet中的过滤器Filter详解
- DM8168视频采集流程
- Xilinx ISE使用流程(从新建项目到仿真执行)-之一
- 使用Retrofit和淘宝IP地址库查询IP
- 第一行代码 读笔④ (Fragment)
- Android中Tab的使用
- IntelliJ IDEA设置系列(五):类代码模板自定义(注释)
- 小马哥----高仿米2主板型号m8219刷机拆机主板图与开机界面图 多图展示 刷机谨慎
- 复习笔记——操作系统
- Oracle基础知识4--单行函数(字符函数、数字函数、日期函数、转换函数、通用函数)
- C++11模板:如何判断类中是否有指定名称的成员变量?
- 在Linux中使用线程