2023學(xué)年完整公開課版1OKHttp上傳文件_第1頁
2023學(xué)年完整公開課版1OKHttp上傳文件_第2頁
2023學(xué)年完整公開課版1OKHttp上傳文件_第3頁
2023學(xué)年完整公開課版1OKHttp上傳文件_第4頁
2023學(xué)年完整公開課版1OKHttp上傳文件_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論