You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android ClassCastException:MultipartEntityBuilder无法转为HttpEntity

解决Android中MultipartEntityBuilder与HttpEntity的类型转换异常

异常信息

E/AndroidRuntime: FATAL EXCEPTION: Thread-5
Process: com.comm.a, PID: 4981
java.lang.ClassCastException: org.apache.http.entity.mime.MultipartEntityBuilder cannot be cast to com.google.firebase.crashlytics.buildtools.reloc.org.apache.http.HttpEntity
at com.comm.a.Utils.Connecter.connect(Connecter.java:123)
at com.comm.a.Utils.Sync.sendOrder(Sync.java:384)
at com.comm.a.Activity.Result$10.run(Result.java:919)
at java.lang.Thread.run(Thread.java:764)

相关代码

Connecter类connect方法

public static void connect(List<NameValuePair> params, Context context, File file) {
    setDate(context);
    checkError();
    Log.d("Anpah", "connect");
    try {
        // DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
        HttpClient defaultHttpClient = HttpClientBuilder.create().build();
        String paramString = URLEncodedUtils.format(params, "UTF-8");
        HttpPost httpPost = new HttpPost(url + paramString);
        StringBuilder sb = new StringBuilder();
        sb.append("Basic ");
        sb.append(Base64.encodeToString((login + ":" + password).getBytes(), 2));
        httpPost.addHeader(HttpHeaders.AUTHORIZATION, sb.toString());
        MultipartEntityBuilder multipartEntity =  MultipartEntityBuilder.create();
        multipartEntity.addPart("sendOrder", new FileBody(file));
        httpPost.setEntity((HttpEntity) multipartEntity); // 问题代码行
        HttpResponse httpResponse = defaultHttpClient.execute(httpPost);
        HttpEntity responseEntity = httpResponse.getEntity();
        content = responseEntity.getContent();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        Log.d("Anpah_error", "Connect error 1 " + e.getMessage());
        setError(true);
        errorMsg = e.getMessage();
    } catch (ClientProtocolException e2) {
        e2.printStackTrace();
        Log.d("Anpah_error", "Connect error 2 " + e2.getMessage());
        setError(true);
        errorMsg = e2.getMessage();
    } catch (IOException e3) {
        e3.printStackTrace();
        Log.d("Anpah_error", "Connect error 3 " + e3.getMessage());
        setError(true);
        errorMsg = e3.getMessage();
    }
}

app模块build.gradle配置

plugins {
    id 'com.android.application'
}

android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/INDEX.LIST'
    }
    compileSdk 32

    defaultConfig {
        applicationId "com.comm.a"
        minSdk 23
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
       // useLibrary 'org.apache.http.legacy'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.4.2'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'com.google.firebase:firebase-crashlytics-buildtools:2.9.1'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
  // implementation 'com.flurry.android:analytics:13.3.0@aar'
    implementation group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.3.5'

}

问题分析与修复方案

核心问题

  1. 类型转换逻辑错误:MultipartEntityBuilder是构建器类,并非HttpEntity的实现类,直接强制转换必然抛出异常,需调用其build()方法生成HttpEntity实例。
  2. 依赖类冲突:Firebase Crashlytics buildtools重定位了Apache Http类,导致引入的httpmime库中的类与Firebase重定位的类加载冲突。

修复步骤

1. 修正类型转换代码

将问题代码行替换为:

HttpEntity entity = multipartEntity.build();
httpPost.setEntity(entity);

2. 解决依赖冲突

在android块的packagingOptions中添加规则,优先使用引入的httpmime库中的类:

android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/INDEX.LIST'
        pickFirst 'org/apache/http/**/*.class'
    }
}

3. 可选:启用Apache Legacy库

如果仍存在Apache Http类找不到问题,取消defaultConfig中的注释:

defaultConfig {
    useLibrary 'org.apache.http.legacy'
}

内容的提问来源于stack exchange,提问作者Art N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 06:36:32