版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
OkHttp上傳文件一、OKHTTP簡介2OKHttp是一個(gè)處理網(wǎng)絡(luò)請求的輕量級開源框架,由移動支付Square公司貢獻(xiàn),用于替代HttpUriConnection和ApacheHTTPClient,進(jìn)行http請求,從Android4.4開始HttpUrlConnection底層實(shí)現(xiàn)采用OKHttp,而HttpClient已經(jīng)廢棄,并且在Android6.0API23后已被移除。二、OKHTTP功能3post,get等請求文件上傳下載加載圖片支持請求回調(diào),直接返回對象、對象集合支持session的保持三、OKHTTP優(yōu)點(diǎn)4支持HTTP2/SPDY(SPDY是Google開發(fā)的基于TCP的傳輸層協(xié)議,用以最小化網(wǎng)絡(luò)延遲,提升網(wǎng)絡(luò)速度,優(yōu)化用戶的網(wǎng)絡(luò)使用體驗(yàn))socket自動選擇路線,支持重連,擁有自動維護(hù)的socket連接池,減少握手次數(shù),減少了請求延遲,共享socket,減少了對服務(wù)器的請求次數(shù)基于Headers的緩存策略減少重復(fù)的網(wǎng)路請求擁有Interceptors輕松處理請求與相應(yīng)(自動處理GZip壓縮)四、OKHTTP使用5添加依賴compile'com.squareup.okhttp3:logging-interceptor:3.4.2'四、OKHTTP使用6頁面布局代碼<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:scaleType="fitXY"
android:src="@mipmap/ic_launcher"
android:id="@+id/iv_img"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="相機(jī)"
android:id="@+id/bt_camera"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="相冊"
android:id="@+id/bt_xiangce"/>
</LinearLayout>四、OKHTTP使用7MainAvtivity.java代碼實(shí)現(xiàn):privateImageViewiv_img;
privateButtonbt_camera;
privateButtonbt_xiangce;
privatestaticfinalintPHOTO_REQUEST_CAREMA=1;//拍照
privatestaticfinalintPHOTO_REQUEST_GALLERY=2;//從相冊中選擇
privatestaticfinalintPHOTO_REQUEST_CUT=3;//結(jié)果
/*頭像名稱*/
privatestaticfinalStringPHOTO_FILE_NAME="temp_photo.jpg";
privateFiletempFile;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
initView();
}
privatevoidinitView(){
iv_img=(ImageView)findViewById(R.id.iv_img);
bt_camera=(Button)findViewById(R.id.bt_camera);
bt_xiangce=(Button)findViewById(R.id.bt_xiangce);
//從SharedPreferences獲取圖片
getBitmapFromSharedPreferences();
bt_camera.setOnClickListener(this);
bt_xiangce.setOnClickListener(this);
}四、OKHTTP使用8
@Override
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.bt_camera:
//激活相機(jī)
Intentintent=newIntent("android.media.action.IMAGE_CAPTURE");
//判斷存儲卡是否可以用,可用進(jìn)行存儲
if(hasSdcard()){
tempFile=newFile(Environment.getExternalStorageDirectory(),PHOTO_FILE_NAME);
//從文件中創(chuàng)建uri
Uriuri=Uri.fromFile(tempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
}
//開啟一個(gè)帶有返回值的Activity,請求碼為PHOTO_REQUEST_CAREMA
startActivityForResult(intent,PHOTO_REQUEST_CAREMA);
break;
caseR.id.bt_xiangce:
//激活系統(tǒng)圖庫,選擇一張圖片
Intentintent1=newIntent(Intent.ACTION_PICK);
intent1.setType("image/*");
//開啟一個(gè)帶有返回值的Activity,請求碼為PHOTO_REQUEST_GALLERY
startActivityForResult(intent1,PHOTO_REQUEST_GALLERY);
break;
}
}
/*判斷sdcard是否被掛載*/
privatebooleanhasSdcard(){
//判斷SD卡手否是安裝好的media_mounted
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
returntrue;
}else{
returnfalse;
}
}四、OKHTTP使用9/*
*剪切圖片
*/
privatevoidcrop(Uriuri){
//裁剪圖片意圖
Intentintent=newIntent("com.android.camera.action.CROP");
intent.setDataAndType(uri,"image/*");
intent.putExtra("crop","true");
//裁剪框的比例,1:1
intent.putExtra("aspectX",1);
intent.putExtra("aspectY",1);
//裁剪后輸出圖片的尺寸大小
intent.putExtra("outputX",250);
intent.putExtra("outputY",250);
intent.putExtra("outputFormat","JPEG");//圖片格式
intent.putExtra("noFaceDetection",true);//取消人臉識別
intent.putExtra("return-data",true);
//開啟一個(gè)帶有返回值的Activity,請求碼為PHOTO_REQUEST_CUT
startActivityForResult(intent,PHOTO_REQUEST_CUT);
}四、OKHTTP使用10@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
if(requestCode==PHOTO_REQUEST_GALLERY){
//從相冊返回的數(shù)據(jù)
if(data!=null){
//得到圖片的全路徑
Uriuri=data.getData();
crop(uri);
}
}elseif(requestCode==PHOTO_REQUEST_CAREMA){
//從相機(jī)返回的數(shù)據(jù)
if(hasSdcard()){
crop(Uri.fromFile(tempFile));
}else{
Toast.makeText(MainActivity.this,"未找到存儲卡,無法存儲照片!",Toast.LENGTH_SHORT).show();
}
}elseif(requestCode==PHOTO_REQUEST_CUT){
//從剪切圖片返回的數(shù)據(jù)
if(data!=null){
Bitmapbitmap=data.getParcelableExtra("data");
/**
*獲得圖片
*/
iv_img.setImageBitmap(bitmap);
//保存到SharedPreferences
saveBitmapToSharedPreferences(bitmap);
}
try{
//將臨時(shí)文件刪除
tempFile.delete();
}catch(Exceptione){
e.printStackTrace();
}
}
super.onActivityResult(requestCode,resultCode,data);
}四、OKHTTP使用11//保存圖片到SharedPreferences
privatevoidsaveBitmapToSharedPreferences(Bitmapbitmap){
//Bitmapbitmap=BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
//第一步:將Bitmap壓縮至字節(jié)數(shù)組輸出流ByteArrayOutputStream
ByteArrayOutputStreambyteArrayOutputStream=newByteArrayOutputStream();
press(Bitmap.CompressFormat.PNG,80,byteArrayOutputStream);
//第二步:利用Base64將字節(jié)數(shù)組輸出流中的數(shù)據(jù)轉(zhuǎn)換成字符串String
byte[]byteArray=byteArrayOutputStream.toByteArray();
StringimageString=newString(Base64.encodeToString(byteArray,Base64.DEFAULT));
//第三步:將String保持至SharedPreferences
SharedPreferencessharedPreferences=getSharedPreferences("testSP",Context.MODE_PRIVATE);
SharedPreferences.Editoreditor=sharedPreferences.edit();
editor.putString("image",imageString);
mit();
//上傳頭像
setImgByStr(imageString,"");
}四、OKHTTP使用12/**
*上傳頭像
*@paramimgStr
*@paramimgName
*/
publicvoidsetImgByStr(StringimgStr,StringimgName){
Stringurl="21:8080/photo/";//服務(wù)器接受請求地址
Map<String,String>params=newHashMap<String,String>();
params.put("id","11460047");//11459832
params.put("data",imgStr);
OkHttp.postAsync(url,params,newOkHttp.DataCallBack(){
@Override
publicvoidrequestFailure(Requestrequest,IOExceptione){
Log.i("上傳失敗","失敗"+request.toString()+e.toString());
}
@Override
publicvoidrequestSuccess(Stringresult)throwsException{
Log.i("上傳成功",result);
}
});
}四、OKHTTP使用13
//從SharedPreferences獲取圖片
privatevoidgetBitmapFromSharedPreferences(){
SharedPreferencessharedPreferences=getSharedPreferences("testSP",Context.MODE_PR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 借款合同訴訟時(shí)效及其影響因素
- 無底薪勞動合同樣本
- 貨物銷售合同格式
- 二手車交易協(xié)議書模板示例
- 財(cái)務(wù)咨詢協(xié)議書
- 2024年肉類供貨合同范本
- 個(gè)人信貸代理協(xié)議
- 2024年項(xiàng)目合作協(xié)議書撰寫大全
- 承攬合同-網(wǎng)頁制作協(xié)議
- 聚丙烯供貨合同書聚丙烯采購合同2024年
- 底棲生物調(diào)查方法與分類鑒定
- 中南空管局2023屆高校畢業(yè)生春季招考聘用筆試參考題庫含答案解析
- 幼兒園每月食品安全調(diào)度會議紀(jì)要模板5
- 醫(yī)學(xué)影像設(shè)備學(xué)考試題庫及答案
- 心靈捕手心理影析PPT
- 四史改革開放微團(tuán)課ppt
- 名著導(dǎo)讀《艾青詩選》:如何讀詩(教學(xué)設(shè)計(jì)) 九年級語文上冊同步備課系列部編版
- 20人小公司管理制度模板
- 《整式的乘法與因式分解》說課稿
- 勞務(wù)施工組織方案 勞務(wù)施工組織設(shè)計(jì)(八篇)
- GB/T 3293.1-1998鞋號
評論
0/150
提交評論