App演示視頻
SVID_20210422_144935_1
前言
??隨著垃圾分類的呼聲越來越高,未來說不定全國都會實行,因此了解分類可以讓你少被罰錢,另外就是這也是為了環保,為了🌏啊,
正文
??既然是一個APP,那么從什么地方開始入手呢?APP最重要的是什么?是資料,任何APP操作的都是資料,只不過形式各不相同,那么垃圾分類的資料從什么地方來呢,網路上有很多的API資料提供商,例如聚合、天行等,這里我將使用天行API,可能會有第一次看博客的朋友,不過我也是第一次寫這個垃圾分類APP,因此我們都從頭開始吧,
一、申請垃圾分類API
首先注冊賬號,點擊天行資料API進入主頁,

樸實無華的主頁,右上角那里就是登錄和立即注冊,點擊立即注冊,

這里就是填寫基本資訊,沒啥好說的,填寫完畢之后,點擊確定注冊,注冊成功會給你的郵箱發一封郵件,

去郵箱打開郵件,然后點擊鏈接,通過驗證

驗證通過之后,會自動跳轉回控制臺,然后登錄剛才注冊的賬號即可,之后進入主頁面,在搜索框輸入 垃圾分類API

選擇第一個垃圾分類

這個介面是免費的,

申請這個介面

立即申請

立即除錯,點擊測驗請求,會通過這個key去請求介面,

回傳的資料如下:
{
"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次免費,超過之后則會扣天豆,天豆可以在我的控制臺查看,不建議充值,個人開發的話,基本免費的次數夠用了,

那么現在的介面地址就有了,如下:
http://api.tianapi.com/txapi/lajifenlei/index?key=783da68c7ea7e10fcd259db651cc550b&word=眼鏡
這里面的key換成自己的,我這每天一百的免費量可經不起折騰啊,
二、創建專案
下面來創建Android專案了,打開Android Studio,專案命名為:GoodTrash,
翻譯過來就是 好垃圾,這個名字是不是挺有意思的,它有三層意思,第一是英文直譯,第二就是好的垃圾,第三就是好垃圾指這個專案,

既然是網路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>
如下所示:

為了使這個配置生效,需要到AndroidManifest.xml中配置,如下所示:

我在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" }

然后修改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模塊,



然后再點擊Next,等待加載到你的專案之后,
之后點擊這個圖示,進入專案結構,

我們現在的mvp框架雖然移動進來了,但是app模塊需要依賴才能使用,

mvp是一個模塊,因此最終選擇的是模塊依賴,

點擊OK,然后你會發現有報錯,

這是重復使用了組態檔的原因,打開mvplibrary的AndroidManifest.xml

刪掉我標注的這句話,然后點擊這個小象圖示重新同步配置專案

然后就正常了,下面我們可以來訪問介面了,
三、訪問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("眼鏡");
}
下面運行一下,通過日志列印出來識別的結果:

然后把剛才的眼鏡改成羽毛球,再運行一下:

你會發現這個資料比剛才少了很多,這說明回傳資料的結果是根據不同的物品來的,因此這個結果必定是一個可變陣列,所以你不能寫死,
文末
本來是不想做這樣的系列APP文章的,因為寫起來太費勁,比寫代碼花的時間多,但是我要是直接給幾個效果圖,然后貼上原始碼,一些剛學習Android的朋友又不能理解,所以為了使初學者能夠看懂,這個垃圾分類APP我也會從頭到尾寫博文講解每一步,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/279617.html
標籤:其他
