1. 程式人生 > >Retrofit2+RxJava學習小計(一):單檔案、多檔案上傳之填平的坑

Retrofit2+RxJava學習小計(一):單檔案、多檔案上傳之填平的坑

從Eclipse轉戰AndroidStudio已經有兩個月了。先誇誇Google親兒子的強大吧,各種方便就不一一道來了。主要是現在的Android陣營已經不想前兩年了。各種開源框架開源庫。也正是如此,AndroidStudio匯入開源的專案非常方便。自從Google源生不推薦使用HttpClient後就不能愉快使用Async-Http了。既然已經轉戰AndroidStudio,那就還是怪怪的使用新技術開發。Retrofit2+RxJava目前很火。理解起來也不難。但是上手確實各種坑。
今天就記錄一下踩過的坑吧。最近在做一個上傳資料的專案。雖然專案不大,但為了最求完美,也是為了熟悉新技術,直接選用了Retrofit2+RxJava進行開發。經過數週的學習,漸漸地瞭解了Retrofit2+RxJava組合起來的運作。可到檔案上傳部分時各種問題。網上的資料根本不齊,東拼西湊的算是看完了上傳的流程。
也和一般的請求一樣,先寫網路介面,這裡就只帖程式碼。

一、單檔案上傳

1、介面部分。網上搜出來的一般就是上邊的用法。但是蛋疼的是!!!只能固定的名字上傳!什麼鬼!!!只能固定名字上傳還怎麼玩,所以推薦使用第二種方法,寫起來也只多以上程式碼。
這裡講一下第一個介面中@Part裡邊的“file”和“filename”,“file”就是你的網路接口裡邊給你上傳檔案的時檔案的欄位,就類似於後邊macAddress欄位一個意思,伺服器會把你的這個檔案解析到“file”欄位裡邊去。“filename”就是你這個檔案上傳到伺服器的名字。
這裡寫圖片描述
單檔案上傳的話最終推薦使用第二個介面。
2、程式碼實現。程式碼實現部分就很簡單了,直接上圖。
這裡直說一下需要注意的地方,在構造MultipartBody.Part

物件的三個引數,其實引數SDK中有說明,這裡還是講一下,其實就是和第一介面一樣,第一個引數是欄位,第二個引數是名字,把“1.txt”換成了這個檔案的名字。
這裡寫圖片描述
兩個介面中後邊的:@Query("macAddress") String macAddress就是伺服器要求的一個引數,這裡關於介面的引數可以網上查,

二、多檔案上傳

來了,坑來了。網上寫的方法實話傳不上去,後邊攜帶的macAddress伺服器都有列印,就是接收不到檔案。
下面就在講一下踩過的坑。
1、介面部分。是不是和單檔案很像,是不是很簡單。這裡就不多講了。
這裡寫圖片描述

2、程式碼實現。直接貼程式碼,看清楚圖片中劃出的重點。

這裡寫圖片描述


網上的程式碼貼出來的是我注視掉的程式碼,是上傳不上的。
下面在說一下這段程式碼的含義吧,其實就是建立了一個Map,裡邊裝載著你要上傳的檔案物件,
為何網上的程式碼無法上傳,來一張圖貼出開立馬就能發現問題。(為啥我第一時間沒有發現!/捂臉 /尷尬)
這裡寫圖片描述
怎麼樣?這張圖眼熟吧。沒錯就是單檔案上傳中有缺陷的介面。看出玄機了吧,這個在@Part的“filename”是沒有"\""這玩意兒的。也正因為網上的程式碼中加了這玩意兒,而不是直接在“filename”後邊跟的檔名字。所以導致死活傳不上去。經過個吧小時的除錯才把這個搞完,伺服器端的程式也是我自己寫的,如果大家想了解的話不妨加我微信公眾吧,雖然服務端寫的很簡單,但對於初學者來學習Retrofit2+RxJava上傳檔案是搓搓有餘的,也不至於各種資料找不到。

至此本次學習筆記已經整理完畢。希望在與大家分享的同時讓自己也可以加深記憶。和大家一起學習一起進步。


掃描下方二維碼即可關注我的公眾號,想要實時接收博文推送,拿出手機掃碼關注公眾號吧~

公眾號二維碼

微信掃碼,即刻關注。

會不定期的更新相關內容喲 ^_^