最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android基于OkHttp實(shí)現(xiàn)文件上傳功能

 更新時(shí)間:2022年07月27日 08:44:01   作者:凌風(fēng).983  
這篇文章主要為大家詳細(xì)介紹了Android基于OkHttp實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android基于OkHttp實(shí)現(xiàn)文件上傳的具體代碼,供大家參考,具體內(nèi)容如下

一、相關(guān)概述

  • Android請(qǐng)求訪問(wèn)服務(wù)端大多數(shù)情況下依舊是使用http協(xié)議,故而可以參照web端的數(shù)據(jù)傳輸形式來(lái)實(shí)現(xiàn)。
  • multipart/form-data是瀏覽器提交表單上傳文件的一種方式。
  • 有關(guān)于http的get,post請(qǐng)求大家可以自行百度了解。
  • OkHttp是一款優(yōu)秀的HTTP框架,它支持get請(qǐng)求和post請(qǐng)求,支持基于Http的文件上傳和下載,支持加載圖片,支持下載文件透明的GZIP壓縮,支持響應(yīng)緩存避免重復(fù)的網(wǎng)絡(luò)請(qǐng)求,支持使用連接池來(lái)降低響應(yīng)延遲問(wèn)題。

二、簡(jiǎn)單使用

1:添加依賴

implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.okio:okio:1.12.0'

2:編寫(xiě)UploadUtil類

package com.example.clientapplication.utils;
?
import java.io.File;
import java.io.IOException;
import java.util.UUID;
?
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
?
public class UploadUtil {
? ? private OkHttpClient okHttpClient;
? ? private UploadUtil(){
? ? ? ? okHttpClient = new OkHttpClient();
? ? }
? ? /**
? ? ?* 使用靜態(tài)內(nèi)部類的方式實(shí)現(xiàn)單例模式
? ? ?*/
? ? private static class UploadUtilInstance{
? ? ? ? private static final UploadUtil INSTANCE = new UploadUtil();
? ? }
? ? public static UploadUtil getInstance(){
? ? ? ? return UploadUtilInstance.INSTANCE;
? ? }
?
? ? /**
? ? ?* @param url ? 服務(wù)器地址
? ? ?* @param file ?所要上傳的文件
? ? ?* @return ? ? ?響應(yīng)結(jié)果
? ? ?* @throws IOException
? ? ?*/
? ? public ResponseBody upload(String url, File file) throws IOException {
? ? ? ? OkHttpClient client = new OkHttpClient();
? ? ? ? RequestBody requestBody = new MultipartBody.Builder()
? ? ? ? ? ? ? ? .setType(MultipartBody.FORM)
? ? ? ? ? ? ? ? .addFormDataPart("file", file.getName(),
? ? ? ? ? ? ? ? ? ? ? ? RequestBody.create(MediaType.parse("multipart/form-data"), file))
? ? ? ? ? ? ? ? .build();
? ? ? ? Request request = new Request.Builder()
? ? ? ? ? ? ? ? .header("Authorization", "ClientID" + UUID.randomUUID())
? ? ? ? ? ? ? ? .url(url)
? ? ? ? ? ? ? ? .post(requestBody)
? ? ? ? ? ? ? ? .build();
? ? ? ? Response response = client.newCall(request).execute();
? ? ? ? if (!response.isSuccessful())
? ? ? ? ? ? throw new IOException("Unexpected code " + response);
? ? ? ? return response.body();
? ? }
}

3:使用Util完成文件上傳

/**
? ? ?* 創(chuàng)建線程實(shí)現(xiàn)文件的上傳
? ? ?* @param view
? ? ?*/
? ? public void upload(View view){
? ? ? ? new Thread(new Runnable() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? UploadUtil.getInstance().upload(path,file);
? ? ? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }).start();
? ? }

三、注意事項(xiàng)

在文件上傳時(shí)我用的是利用Intent獲取所選文件的Uri,使用了大佬的RealPathFromUriUtils工具類,get到文件的path,然后實(shí)例化了File作為參數(shù)使用upload方法。

在定義UploadUtil時(shí)我使用了單例模式,在保證線程安全的前提下節(jié)省資源,提升服務(wù)器訪問(wèn)速率。覺(jué)得麻煩的可以不使用單例。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android自定義ViewGroup之FlowLayout(三)

    Android自定義ViewGroup之FlowLayout(三)

    這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup之FlowLayout,常用于關(guān)鍵字標(biāo)簽,搜索熱詞列表等功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android 快速繪制一個(gè)圓角矩形的實(shí)例

    Android 快速繪制一個(gè)圓角矩形的實(shí)例

    下面小編就為大家分享一篇Android 快速繪制一個(gè)圓角矩形的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 詳解Android中Activity的四大啟動(dòng)模式實(shí)驗(yàn)簡(jiǎn)述

    詳解Android中Activity的四大啟動(dòng)模式實(shí)驗(yàn)簡(jiǎn)述

    本篇文章主要介紹了Android中Activity的四大啟動(dòng)模式實(shí)驗(yàn)簡(jiǎn)述,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • Android多渠道打包配置方案

    Android多渠道打包配置方案

    多渠道打包,顧名思義就是用來(lái)區(qū)分同一個(gè)軟件,在不同渠道上的釋放版本,目前我們有需求是要一套軟件代碼庫(kù)多個(gè)項(xiàng)目共同使用,針對(duì)不同的項(xiàng)目打包不同的渠道apk,現(xiàn)學(xué)記錄一下,需要的朋友跟著小編一起來(lái)學(xué)習(xí)吧
    2024-06-06
  • 仿ios狀態(tài)欄顏色和標(biāo)題欄顏色一致的實(shí)例代碼

    仿ios狀態(tài)欄顏色和標(biāo)題欄顏色一致的實(shí)例代碼

    下面小編就為大家分享一篇仿ios狀態(tài)欄顏色和標(biāo)題欄顏色一致的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Android 炫舞漫天飛雪效果圖

    Android 炫舞漫天飛雪效果圖

    這篇文章主要介紹了Android 炫舞漫天飛雪效果圖的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • 詳解Android App中的AsyncTask異步任務(wù)執(zhí)行方式

    詳解Android App中的AsyncTask異步任務(wù)執(zhí)行方式

    這篇文章主要介紹了Android App中的AsyncTask異步任務(wù)執(zhí)行方式,文中舉了一個(gè)打開(kāi)網(wǎng)絡(luò)圖片的例子幫助大家直觀理解,需要的朋友可以參考下
    2016-04-04
  • Android實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的全過(guò)程記錄

    Android實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的全過(guò)程記錄

    對(duì)于android軟件開(kāi)發(fā)初級(jí)學(xué)習(xí)者來(lái)說(shuō),簡(jiǎn)單的頁(yè)面跳轉(zhuǎn)是必學(xué)的,這篇文章主要給大家介紹了關(guān)于Android實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • 基于android示例程序(bitmapfun) 高效加載圖片讓人無(wú)語(yǔ)地方

    基于android示例程序(bitmapfun) 高效加載圖片讓人無(wú)語(yǔ)地方

    嘗試了使用git上的一個(gè)開(kāi)源項(xiàng)目afinal(bitmapfun的封裝版)來(lái)加載圖片,但是在測(cè)試的時(shí)候發(fā)現(xiàn)了一個(gè)問(wèn)題,新的圖片加載器(bitmapfun)比之前用的ImageDownloader要慢很多,特別是在網(wǎng)絡(luò)狀況不好的時(shí)候,那簡(jiǎn)直是太讓人無(wú)語(yǔ)了
    2013-04-04
  • android從系統(tǒng)圖庫(kù)中取圖片的實(shí)例代碼

    android從系統(tǒng)圖庫(kù)中取圖片的實(shí)例代碼

    這篇文章主要介紹了android從系統(tǒng)圖庫(kù)中取圖片的方法,涉及Android讀取及選擇圖片等相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

陆河县| 来凤县| 岳西县| 阿巴嘎旗| 饶河县| 武宣县| 新化县| 寿宁县| 邹平县| 新巴尔虎左旗| 丰镇市| 丰原市| 雅江县| 桃园县| 常熟市| 陵川县| 泾川县| 广德县| 宁津县| 正安县| 宜丰县| 台安县| 滕州市| 轮台县| 长垣县| 海口市| 什邡市| 双江| 邛崃市| 娄底市| 黄大仙区| 颍上县| 敦煌市| 汪清县| 北川| 兴义市| 靖安县| 白水县| 新绛县| 连山| 邯郸市|