Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 多文件上傳

Android 多文件上傳

編輯:關於Android編程

上次在論壇裡面回答過一個關於多文件上傳的問題,然後就有好多同學私信問我具體的實現方式。由於人有點多並且工作有點忙,顧不上及時的回復大家,我在這裡先說聲抱歉了。

下面我把這塊兒整理了一下,供大家參考。

前提

  考慮到項目的單一性和安全穩定性,我在項目中用到的是鴻洋大神封裝的OkHttpUtils。大家有不明白的可以先去看看http://blog.csdn.net/lmj623565791/article/details/49734867 在大神的Utils中也有關於文件上傳的封裝,但是需要你一個一個的添加,大家可以看一下:
OkHttpUtils.post()//
    .addFile("mFile", "messenger_01.png", file)//
    .addFile("mFile", "test1.txt", file2)//
    .url(url)
    .params(params)//
    .headers(headers)//
    .build()//
    .execute(new MyStringCallback());

  但是,在我們的項目中很多時候是不知道要具體上傳幾個文件的,比如說微信的朋友圈,用戶可以上傳1張照片,也可以上傳9張,如果你針對這九中情況分別做封裝的話,那我也不好說什麼。但是為了省勁我做了如下的封裝,目的就是,不管用戶添加幾張照片,我都放到一個list裡面,有多少上傳多少。  

在鴻洋大神的基礎上做一個簡單封裝

首先我們創建一個MyOkhttpUtils繼承大神的OkHttpUtils類,並重寫post方法。至於為什麼後面會提到。下面看我封裝的:
public class MyOkHttpUtils extends OkHttpUtils {
    public MyOkHttpUtils(OkHttpClient okHttpClient) {
        super(okHttpClient);
    }
    public static MyPostFromBuilder post()
    {
        return new MyPostFromBuilder();
    }
}
這裡面的這個MyPostFromBuilder是什麼鬼呢?這就是重點部分了,因為在大神的封裝中關於上傳的addFile()方法是在PostFromBuilder中的,它長這樣:
public PostFormBuilder addFile(String name, String filename, File file)
    {
        files.add(new FileInput(name, filename, file));
        return this;
    }

大家可以看到,他這個方法添加的單個文件,那麼我們要做的就是重寫它,讓他去加載一個list.。下面我們寫一個自己的MyPostFromBuilder並繼承PostFromBuilder,並重寫addFile()方法,除了重寫它以外,還需要重寫build(),必須的,這個一定要記住,否則在你調用的時候,調用的就是父類的build了,這樣你重寫addFile就不起作用了。
public class MyPostFromBuilder extends PostFormBuilder {
    private List files = new ArrayList<>();
    public MyPostFromBuilder addFile(List imgList)
    {
        for (int i = 0;i 



好了,基本到這裡就結束了。上面在重寫MyOkHttpUtils的時候說過,我們重寫了post方法,因為父類中返回的是PostFromBuilder,那就不符合我們的要求了對吧。

用法

好了,大神的封裝使用方法我就不說了,下面看下我們的使用方法:
public void upDate(String version, String device, String content, List imgList, OnRequestListener onRequestListener) {
        String url = Utils.getSignUrl(MyURL.FEEDBACK);
        MyOkHttpUtils.post()
                .addFile(imgList)
                .url(url)
                .addParams("version",version)
                .addParams("device",device)
                .addParams("content",content)
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        LogUtil.d("farley", "upDate.onError" + e.toString());
                    }

                    @Override
                    public void onResponse(String response, int id) {
                        LogUtil.d("farley", "upDate.success" + response);
                    }
                });
    }

url 是我要提交的地址 imgList裡面就是我要上傳的圖片地址,並且在這個方法裡面,我們還可以上傳其他參數,非常適合在朋友圈這種場景下使用。

結語

對於那些私信我的同學說聲抱歉,真的是年底太忙了,簡單回復吧,你們說我說的不清楚,但是確實是抽不出更多的時間去細說。今天記錄下來,供大家參考吧。 對了說一下我為什麼不用XUTILS了,因為xutils裡面封裝的東西太多了,有加載圖片的,有訪問網絡的,有數據庫等等,有的真的是用不到,或者性能不如其他,比如說加載圖片我個人認為就不如Glide,所以我就拋棄他了,如果同學覺得,有需要說明一下xutils的多文件上傳的話,也可以留言告訴我,我抽時間也寫寫
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved