一.背景
? ??在一次做項(xiàng)目的時(shí)候我們采用了Rxjava和Retrofit來(lái)進(jìn)行網(wǎng)絡(luò)請(qǐng)求,開(kāi)始特別順利画舌,但是到了一個(gè)要上傳圖片和文字的時(shí)候和后臺(tái)對(duì)接總是不成功堕担,在不斷的探索中我們最終找到了完美的解決方案,在此和各位讀者交流一下曲聂,歡迎大神們指導(dǎo)霹购。
二.原因
圖片上傳的時(shí)候圖片會(huì)解析成字符串,這樣導(dǎo)致圖片這個(gè)參數(shù)過(guò)長(zhǎng)朋腋,后臺(tái)接口參數(shù)長(zhǎng)度限制在256齐疙,所以直接使用post上傳的時(shí)候后臺(tái)不能夠識(shí)別,這個(gè)時(shí)候我們應(yīng)該把我們的參數(shù)變成一個(gè)body旭咽。
三.使用
1.在接口文件添加要調(diào)用那個(gè)接口
*注意事項(xiàng):
a:這里報(bào)紅的地方添加自己說(shuō)需要的解析文件
b.post內(nèi)可以使用絕對(duì)路徑贞奋,同樣可以使用相對(duì)路徑,個(gè)人建議使用相對(duì)路徑穷绵,這樣的話修改的時(shí)候方便轿塔。
2.body的構(gòu)建
*注意事項(xiàng):
compressUrl為轉(zhuǎn)換過(guò)的文件路徑,具體獲取如下:
//1.filePath拍照所得的文件路徑2.targetPath轉(zhuǎn)換之后的路徑请垛,3.quality 壓縮的質(zhì)量
public staticStringcompressImage(String filePath,String targetPath, int quality) {
Bitmap bm =getSmallBitmap(filePath);//獲取一定尺寸的圖片
intdegree =readPictureDegree(filePath);//獲取相片拍攝角度
if(degree !=0) {//旋轉(zhuǎn)照片角度催训,防止頭像橫著顯示
bm =rotateBitmap(bm,degree);
}
File outputFile =newFile(targetPath);
try{
if(!outputFile.exists()) {
outputFile.getParentFile().mkdirs();
//outputFile.createNewFile();
}else{
outputFile.delete();
}
FileOutputStream out =newFileOutputStream(outputFile);
bm.compress(Bitmap.CompressFormat.JPEG,quality,out);
}catch(Exception e) {
}
return outputFile.getPath();
}
/**
* 根據(jù)路徑獲得圖片信息并按比例壓縮,返回bitmap
*/
public staticBitmapgetSmallBitmap(String filePath) {
finalBitmapFactory.Options options =newBitmapFactory.Options();
options.inJustDecodeBounds=true;//只解析圖片邊沿宗收,獲取寬高
BitmapFactory.decodeFile(filePath,options);
// 計(jì)算縮放比
options.inSampleSize=calculateInSampleSize(options,480,800);
// 完整解析圖片返回bitmap
options.inJustDecodeBounds=false;
returnBitmapFactory.decodeFile(filePath,options);
}
3.使用retrofit調(diào)用接口
commonsubscriber是我們自己封裝之后的subscriber 漫拭,大佬可以使用自己的subscribe,并做后續(xù)處理混稽。