Android 垃圾分类APP(一)申请API、搭建项目、访问接口获取数据

简介: Android 垃圾分类APP(一)申请API、搭建项目、访问接口获取数据

前言


  随着垃圾分类的呼声越来越高,未来说不定全国都会实行,因此了解分类可以让你少被罚钱,另外就是这也是为了环保,为了🌏啊。


正文


既然是一个APP,那么从什么地方开始入手呢?APP最重要的是什么?是数据,任何APP操作的都是数据,只不过形式各不相同,那么垃圾分类的数据从什么地方来呢。网络上有很多的API数据提供商,例如聚合、天行等,这里我将使用天行API,可能会有第一次看博客的朋友,不过我也是第一次写这个垃圾分类APP,因此我们都从头开始吧。



一、申请垃圾分类API


首先注册账号,点击天行数据API进入主页。


20210326172641559.png


朴实无华的主页,右上角那里就是登录和立即注册,点击立即注册。


20210326172809466.png


这里就是填写基本信息,没啥好说的。填写完毕之后,点击确定注册。注册成功会给你的邮箱发一封邮件。


20210326173228974.png


去邮箱打开邮件,然后点击链接,通过验证


20210326173420826.png


验证通过之后,会自动跳转回控制台,然后登录刚才注册的账号即可。之后进入主页面,在搜索框输入 垃圾分类API


20210326173840233.png


选择第一个垃圾分类


20210326174007217.png


这个接口是免费的。


20210326174107793.png


申请这个接口


20210326174444240.png


立即申请


20210326174514670.png


立即调试,点击测试请求,会通过这个key去请求接口。


20210326174621181.png


返回的数据如下:


{
  "code": 200,
  "msg": "success",
  "newslist": [
    {
      "name": "太阳眼镜",
      "type": 3,
      "aipre": 0,
      "explain": "干垃圾即其它垃圾,指除可回收物、有害垃圾、厨余垃圾(湿垃圾)以外的其它生活废弃物。",
      "contain": "常见包括砖瓦陶瓷、渣土、卫生间废纸、猫砂、污损塑料、毛发、硬壳、一次性制品、灰土、瓷器碎片等难以回收的废弃物",
      "tip": "尽量沥干水分;难以辨识类别的生活垃圾都可以投入干垃圾容器内"
    },
    {
      "name": "智能眼镜",
      "type": 0,
      "aipre": 0,
      "explain": "可回收垃圾是指适宜回收、可循环利用的生活废弃物。",
      "contain": "常见包括各类废金属、玻璃瓶、易拉罐、饮料瓶、塑料玩具、书本、报纸、广告单、纸板箱、衣服、床上用品、电子产品等",
      "tip": "轻投轻放;清洁干燥,避免污染,费纸尽量平整;立体包装物请清空内容物,清洁后压扁投放;有尖锐边角的、应包裹后投放"
    },
    {
      "name": "游泳眼镜",
      "type": 3,
      "aipre": 0,
      "explain": "干垃圾即其它垃圾,指除可回收物、有害垃圾、厨余垃圾(湿垃圾)以外的其它生活废弃物。",
      "contain": "常见包括砖瓦陶瓷、渣土、卫生间废纸、猫砂、污损塑料、毛发、硬壳、一次性制品、灰土、瓷器碎片等难以回收的废弃物",
      "tip": "尽量沥干水分;难以辨识类别的生活垃圾都可以投入干垃圾容器内"
    },
    {
      "name": "眼镜",
      "type": 3,
      "aipre": 0,
      "explain": "干垃圾即其它垃圾,指除可回收物、有害垃圾、厨余垃圾(湿垃圾)以外的其它生活废弃物。",
      "contain": "常见包括砖瓦陶瓷、渣土、卫生间废纸、猫砂、污损塑料、毛发、硬壳、一次性制品、灰土、瓷器碎片等难以回收的废弃物",
      "tip": "尽量沥干水分;难以辨识类别的生活垃圾都可以投入干垃圾容器内"
    },
    {
      "name": "眼镜布",
      "type": 3,
      "aipre": 0,
      "explain": "干垃圾即其它垃圾,指除可回收物、有害垃圾、厨余垃圾(湿垃圾)以外的其它生活废弃物。",
      "contain": "常见包括砖瓦陶瓷、渣土、卫生间废纸、猫砂、污损塑料、毛发、硬壳、一次性制品、灰土、瓷器碎片等难以回收的废弃物",
      "tip": "尽量沥干水分;难以辨识类别的生活垃圾都可以投入干垃圾容器内"
    },
    {
      "name": "眼镜架",
      "type": 3,
      "aipre": 0,
      "explain": "干垃圾即其它垃圾,指除可回收物、有害垃圾、厨余垃圾(湿垃圾)以外的其它生活废弃物。",
      "contain": "常见包括砖瓦陶瓷、渣土、卫生间废纸、猫砂、污损塑料、毛发、硬壳、一次性制品、灰土、瓷器碎片等难以回收的废弃物",
      "tip": "尽量沥干水分;难以辨识类别的生活垃圾都可以投入干垃圾容器内"
    },
    {
      "name": "眼镜框",
      "type": 3,
      "aipre": 0,
      "explain": "干垃圾即其它垃圾,指除可回收物、有害垃圾、厨余垃圾(湿垃圾)以外的其它生活废弃物。",
      "contain": "常见包括砖瓦陶瓷、渣土、卫生间废纸、猫砂、污损塑料、毛发、硬壳、一次性制品、灰土、瓷器碎片等难以回收的废弃物",
      "tip": "尽量沥干水分;难以辨识类别的生活垃圾都可以投入干垃圾容器内"
    },
    {
      "name": "眼镜盒",
      "type": 3,
      "aipre": 0,
      "explain": "干垃圾即其它垃圾,指除可回收物、有害垃圾、厨余垃圾(湿垃圾)以外的其它生活废弃物。",
      "contain": "常见包括砖瓦陶瓷、渣土、卫生间废纸、猫砂、污损塑料、毛发、硬壳、一次性制品、灰土、瓷器碎片等难以回收的废弃物",
      "tip": "尽量沥干水分;难以辨识类别的生活垃圾都可以投入干垃圾容器内"
    },
    {
      "name": "隐形眼镜",
      "type": 3,
      "aipre": 0,
      "explain": "干垃圾即其它垃圾,指除可回收物、有害垃圾、厨余垃圾(湿垃圾)以外的其它生活废弃物。",
      "contain": "常见包括砖瓦陶瓷、渣土、卫生间废纸、猫砂、污损塑料、毛发、硬壳、一次性制品、灰土、瓷器碎片等难以回收的废弃物",
      "tip": "尽量沥干水分;难以辨识类别的生活垃圾都可以投入干垃圾容器内"
    },
    {
      "name": "隐形眼镜包装盒",
      "type": 0,
      "aipre": 0,
      "explain": "可回收垃圾是指适宜回收、可循环利用的生活废弃物。",
      "contain": "常见包括各类废金属、玻璃瓶、易拉罐、饮料瓶、塑料玩具、书本、报纸、广告单、纸板箱、衣服、床上用品、电子产品等",
      "tip": "轻投轻放;清洁干燥,避免污染,费纸尽量平整;立体包装物请清空内容物,清洁后压扁投放;有尖锐边角的、应包裹后投放"
    }
  ]
}


非常简单,下面我再介绍一些常识,刚才的测试是不计入每天的次数统计的,普通会员每天100次免费,超过之后则会扣天豆。天豆可以在我的控制台查看,不建议充值,个人开发的话,基本免费的次数够用了。


20210326174310817.png


那么现在的接口地址就有了,如下:


http://api.tianapi.com/txapi/lajifenlei/index?key=783da68c7ea7e10fcd259db651cc550b&word=眼镜


二、创建项目


下面来创建Android项目了,打开Android Studio,项目命名为:GoodTrash。

翻译过来就是 好垃圾。这个名字是不是挺有意思的,它有三层意思,第一是英文直译,第二就是好的垃圾,第三就是好垃圾指这个项目。


20210326180203870.png


既然是网络API接口,那么首先应该解决网络的问题。先来配置网络访问环境,第一个就是http的访问许可,Android9.0之后默认使用https访问网络,而这个垃圾分类的接口是http格式的,因此先增加许可。


在res下新建一个xml文件夹,文件夹下新建network_config.xml,里面的代码如下:


<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>


如下所示:


20210328235632908.png


为了使这个配置生效,需要到AndroidManifest.xml中配置,如下所示:


20210607202219395.png


我在manifest标签下配置网络权限,这样应用就可以访问网络了。在application标签下配置刚才的xml文件,这样就可以通过http访问网络了。


在xml文件夹下新建一个file_paths.xml,里面的代码如下:


<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="" />
</paths>


然后在AndroidMainfest.xml的application标签下增加如下代码:


    <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.llw.goodtrash.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"/>
        </provider>


下面配置工程的build.gradle,在里面增加jitpack库。


maven { url "https://jitpack.io" }

20210330103557976.png


然后修改app的build.gradle,在android{}闭包下增加如下代码:


compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }


然后Sync Now同步一下。为了简化开发中的过程了,我这里打算使用mvp框架,也是我之前写的一篇文章,mvp框架中又使用了网络访问框架,也是一篇文章。如果你对这两者一点都没有概念的话,建议你先看看这两篇文章。


Android OkHttp+Retrofit+RxJava搭建网络访问框架(含源码)


Android MVP框架搭建与使用(含源码)


那么我就在当前的项目中引入这个mvp框架,首先下载这个框架的源码,

MvpDemo.rar

这是不需要积分的,下载后解压。然后打开在当前AS中引入mvp模块,


20210330105353107.png

20210330105518907.png

20210330105625117.png

然后再点击Next,等待加载到你的项目之后。


之后点击这个图标,进入项目结构。


20210330105830352.png


我们现在的mvp框架虽然移动进来了,但是app模块需要依赖才能使用。


20210330110112206.png


mvp是一个模块,因此最终选择的是模块依赖,


20210330110153897.png


点击OK,然后你会发现有报错。


20210330110311567.png


这是重复使用了配置文件的原因。打开mvplibrary的AndroidManifest.xml


20210330110415803.png


删掉我标注的这句话。然后点击这个小象图标重新同步配置项目


20210330110524559.png


然后就正常了,下面我们可以来访问接口了。

三、访问API接口


可以在MainActivity中写一个这样的方法,通过使用Okhttp来请求API接口,这里使用的是Get请求,也都是常规的代码。由于变化的只有物品,因此作为入参传进来。


  private void getRecognitionResult(String goods) {
        //使用Get异步请求
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                //拼接访问地址
                .url("http://api.tianapi.com/txapi/lajifenlei/index?key=783da68c7ea7e10fcd259db651cc550b&word=" + goods)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String result = response.body().string();
                if (response.isSuccessful()) {//回调的方法执行在子线程。
                    Log.d("result: ", result);
                }
            }
        });
    }


然后在onCreate中调用


  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取识别的结果
        getRecognitionResult("眼镜");
    }


下面运行一下,通过日志打印出来识别的结果:


20210330112042573.png


然后把刚才的眼镜改成羽毛球,再运行一下:


20210330112233905.png


你会发现这个数据比刚才少了很多,这说明返回数据的结果是根据不同的物品来的,因此这个结果必定是一个可变数组,所以你不能写死。


四、源码


GitHub源码地址如下:GoodTrash


文末


本来是不想做这样的系列APP文章的,因为写起来太费劲,比写代码花的时间多,但是我要是直接给几个效果图,然后贴上源码,一些刚学习Android的朋友又不能理解,所以为了使初学者能够看懂,这个垃圾分类APP我也会从头到尾写博文讲解每一步。




相关文章
|
API 数据处理 开发者
获取淘宝分类详情:深入解析taobao.cat_get API接口
淘宝开放平台推出的`taobao.cat_get` API接口,帮助开发者和商家获取淘宝、天猫的商品分类详情。该接口支持获取类目列表、属性及父类目信息,通过指定分类ID(cid)实现精准查询,并提供灵活的参数设置和高效的数据处理。使用流程包括注册账号、创建应用、获取App Key/Secret、构造请求、发送并解析响应。示例代码展示了如何用Python调用此API。开发者可借此为电商项目提供数据支持。
|
安全 API Swift
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
1225 15
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
|
搜索推荐 API UED
淘宝/天猫获得淘宝app商品详情原数据 API 返回值的应用
该API专注于商品信息整合与展示,提供基础信息抓取、多媒体内容整合等功能,助力实时同步商品数据,构建丰富的详情页。同时支持数据分析与市场洞察,包括销售趋势分析和竞品对比,优化库存与定价策略。此外,动态促销管理和个性化推荐系统可提升营销效果,而实时库存预警和评价数据可视化则显著增强用户体验,为用户决策提供透明依据,全面提升平台竞争力与用户满意度。
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
1101 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
自然语言处理 API 开发者
DeepSeek-Free-API:DeepSeekV3免费的api接口,需要使用api方式的同学可以参考一下这个项目,可以收藏起来试一下
嗨,大家好,我是小华同学。今天为大家介绍一个开源项目——DeepSeek V3 Free 服务。该项目基于 DeepSeek-V3 R1 大模型,提供免费、高性能的 API,支持高速流式输出、多轮对话、联网搜索和深度思考等功能。适用于智能客服、内容创作、教育辅助等场景。部署方式灵活,支持 Docker、Docker-compose、Render、Vercel 和原生部署。欢迎关注我们,获取更多优质开源项目和高效工作学习方法。
3414 15
|
人工智能 Java API
ai-api-union项目,适配各AI厂商api
本项目旨在实现兼容各大模型厂商API的流式对话和同步对话接口,现已支持智谱、豆包、通义、通义版DeepSeek。项目地址:[https://gitee.com/alpbeta/ai-api-union](https://gitee.com/alpbeta/ai-api-union)。通过`ChatController`类暴露两个接口,入参为`ChatRequest`,包含会话ID、大模型标识符和聊天消息列表。流式对话返回`Flux&lt;String&gt;`,同步调用返回`String`
|
供应链 数据挖掘 API
1688app 商品详情接口系列(1688API)
1688作为国内知名批发采购平台,提供了一系列商品详情接口(API),助力企业和开发者获取商品基础、价格、库存及供应商信息。通过Python示例代码展示如何调用这些接口,应用场景涵盖采购决策辅助、数据分析与市场调研、电商平台整合及供应链管理系统的优化,为企业和采购商提供有力的数据支持,提升业务效率和竞争力。
695 15
|
供应链 数据挖掘 API
1688APP 原数据 API 接口的开发、应用与收益
1688作为阿里巴巴旗下的B2B平台,汇聚海量供应商和商品资源。其APP原数据API接口为开发者提供获取商品详细信息的强大工具,涵盖商品标题、价格、图片等。通过注册开放平台账号、申请API权限并调用接口,开发者可构建比价工具、供应链管理及自动化上架工具等应用,提升用户体验与运营效率,创造新的商业模式。示例代码展示了如何使用Python调用API并解析返回结果。
1448 8
|
JSON 供应链 搜索推荐
淘宝APP分类API接口:开发、运用与收益全解析
淘宝APP作为国内领先的购物平台,拥有丰富的商品资源和庞大的用户群体。分类API接口是实现商品分类管理、查询及个性化推荐的关键工具。通过开发和使用该接口,商家可以构建分类树、进行商品查询与搜索、提供个性化推荐,从而提高销售额、增加商品曝光、提升用户体验并降低运营成本。此外,它还能帮助拓展业务范围,满足用户的多样化需求,推动电商业务的发展和创新。
636 5
|
JSON 数据挖掘 API
京东app商品详情API接口系列(京东 API)
本文介绍了使用 Python 调用京东商品详情 API 的方法。前期需安装 `requests` 库处理 HTTP 请求,导入 `json` 库解析 JSON 数据。接口通过商品 ID 获取详细信息,如价格、图片、评价等。示例代码展示了如何构建请求并处理响应数据。应用场景包括电商开发、市场调研和数据分析等,帮助提升用户体验、优化推荐系统及制定市场策略。

热门文章

最新文章