web-dev-qa-db-ja.com

ボレーで複数の画像をアップロードしますか?

私はSOやその他のツイッターでもたくさんの投稿を経験しましたが、使用して複数の画像をアップロードするための非推奨のコードが含まれていない最新の公式またはその他の投稿を取得できませんでしたvolley.Iは、Apache HTTPクライアントの削除を知って、新しいAndroid Mに関連し、代わりに以下を使用することを推奨しました。

Android {
    useLibrary 'org.Apache.http.legacy'
}  

それで、新しく更新された非推奨の少ないボレークラスで複数の画像をアップロードするのを手伝ってくれる人はいますか?

21
Stella

here から最新バージョンのボレーを使用できます。これは、いくつかのマイナーなバグ修正を含む非公式のミラーであり、ソースコードは公式のボレーリポジトリと定期的に同期します。

Gradleの場合

compile 'com.mcxiaoke.volley:library:1.0.19' 

または、コンパイル済みバージョンを ここ からダウンロードできます。

これで、以下の添付クラスを使用して、廃止予定のコードなしでorg.Apache.http.entity.mimeMultipartEntityBuilderの助けを借りて、volleyを使用してマルチパートリクエストを作成できます。

CustomMultipartRequest.Java

使用例

//Auth header
Map<String, String> mHeaderPart= new HashMap<>();
mHeaderPart.put("Content-type", "multipart/form-data;");
mHeaderPart.put("access_token", accessToken);

//File part
Map<String, File> mFilePartData= new HashMap<>();
mFilePartData.put("file", new File(mFilePath));
mFilePartData.put("file", new File(mFilePath));

//String part
Map<String, String> mStringPart= new HashMap<>();
mStringPart.put("profile_id","1");
mStringPart.put("imageType", "ProfileImage");

CustomMultipartRequest mCustomRequest = new CustomMultipartRequest(method, mContext, url, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {
                listener.onResponse(jsonObject);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                listener.onErrorResponse(volleyError);
            }
        }, mFilePartData, mStringPart, mHeaderPart);

httpmime-4.3.5.jarhttpcore-4.3.2.jarを使用して、MultipartEntityBuilderおよびリクエストを行うために使用されるその他のメソッドにアクセスできます。または、ターゲットAPI 23以上の場合は、グラドルに以下を追加します。

Android {
    useLibrary 'org.Apache.http.legacy'
}  

前述のjarを使用している方法で、Android Mでもチャームのように機能します。

更新

com.mcxiaoke.volley:library:1.0.19はサポートが終了しており、メンテナンスされていません。jCenterの公式バージョンを使用してください。

compile 'com.Android.volley:volley:1.0.0'
4
Anoop M

現時点では、Volleyライブラリ(Googleとmcxiaokeの両方)は、まだ多くのクラス内でApacheのライブラリを使用しています。 Apacheの依存関係なしにVolleyを引き続き使用したい場合、プロジェクト内のモジュールとして使用し、ソースコードファイルを変更する必要があります。

my GitHub sample code を参照すると、NetworkResponseHttpHeaderParserBasicNetworkHurlStackVolley...などのクラスがカスタマイズされていることがわかります。マルチパートリクエストの場合は、MultipartActivity.Javaファイル。

build.gradleファイルの内容が表示されます。

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example.volleynoapache"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.Android.support:appcompat-v7:23.1.1'
}

別の優れた代替ソリューションであるIMHOはOkHttpを使用しています。実用的なサンプルコード GitHub もあります。ぜひご覧ください。

それが役に立てば幸い!

2
BNK