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

Android Studio Java调用API上传图片到XAMPP服务器失败求助

问题排查与修复方案

1. 路径变量未正确赋值

你声明的全局变量filepath全程没有被赋值,始终是初始的空字符串,uploadImage方法中创建的所有File对象都是无效空文件,这是上传失败的核心原因。
同时你选择了5个不同的文件,但只用一个变量存储路径,会导致所有文件都指向同一个路径。
修复方法:
替换全局的String filepath=" ";为5个对应路径变量:

String path_passphoto, path_af, path_ab, path_mark, path_payment;

在onActivityResult中给对应路径变量赋值,同时不要直接用Uri.getPath(),需要把content协议的Uri转换为真实文件路径:
先添加Uri转真实路径的工具方法:

private String getRealPathFromUri(Uri uri) {
    String[] projection = {MediaStore.Images.Media.DATA};
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
    if (cursor == null) return uri.getPath();
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String path = cursor.getString(column_index);
    cursor.close();
    return path;
}

修改onActivityResult中的路径获取逻辑:

case 10:
    if (resultCode==RESULT_OK){
        Uri uri = data.getData();
        path_passphoto = getRealPathFromUri(uri);
        R_passphoto.setText(path_passphoto);
    }
    break;
case 20:
    if (resultCode==RESULT_OK){
        Uri uri = data.getData();
        path_af = getRealPathFromUri(uri);
        R_af.setText(path_af);
    }
    break;
case 30:
    if (resultCode==RESULT_OK){
        Uri uri = data.getData();
        path_ab = getRealPathFromUri(uri);
        R_ab.setText(path_ab);
    }
    break;
case 40:
    if (resultCode==RESULT_OK){
        Uri uri = data.getData();
        path_mark = getRealPathFromUri(uri);
        R_mark.setText(path_mark);
    }
    break;
case 50:
    if (resultCode==RESULT_OK){
        Uri uri = data.getData();
        path_payment = getRealPathFromUri(uri);
        R_payment.setText(path_payment);
    }
    break;

修改uploadImage方法中的文件创建逻辑:

private void uploadImage(){
    File file_passphoto=new File(path_passphoto);
    File file_af=new File(path_af);
    File file_ab=new File(path_ab);
    File file_mark=new File(path_mark);
    File file_payment=new File(path_payment);
    // 后续RequestBody和MultipartBody.Part对应替换这五个文件即可
    // ...
}

2. ApiInterface方法参数定义错误

你的uploadimage方法参数顺序、注解、类型完全和调用时不匹配,多余了无注解的String part、String part1参数,注解缺失、顺序错乱,会直接导致参数解析失败。
修复方法:
替换ApiInterface中的uploadimage定义:

@Multipart
@POST("api/register")
Call<responsemodel> uploadimage(
        @Part("adharfront") String adharfront,
        @Part("adharback") String adharback,
        @Part("mark") String mark,
        @Part("pay") String pay,
        @Part("pass") String pass,
        @Part MultipartBody.Part filename,
        @Part MultipartBody.Part filename1,
        @Part MultipartBody.Part filename2,
        @Part MultipartBody.Part filename3,
        @Part MultipartBody.Part filename4
);

3. 注册方法Spinner参数取值错误

registeruser方法中你使用了spinner.getSelectedItem().getClass().toString(),拿到的是Spinner选项的类名,而非选中的文本值,会导致后台接收的课程、实习类型参数错误。
修复方法:
替换为:

Call<responsemodel> responsemodelCall=apiInterface.registeruser(
        R_name.getText().toString(),
        R_email.getText().toString(),
        R_phone.getText().toString(),
        spinner.getSelectedItem().toString(),
        spinner1.getSelectedItem().toString(),
        R_password.getText().toString()
);

4. 错误日志未打印

你在uploadImage的onFailure回调中没有任何日志打印逻辑,无法定位具体错误。
修复方法:
在onFailure中添加日志:

@Override
public void onFailure(Call<responsemodel> call, Throwable t) {
    t.printStackTrace();
    Toast.makeText(Sign_up.this,"上传失败:"+t.getMessage(),Toast.LENGTH_LONG).show();
}

5. 权限与配置检查

  • AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- Android 10及以上添加 -->
<application
    android:requestLegacyExternalStorage="true"
    ...>
  • XAMPP配置修改:打开php.ini,修改post_max_size和upload_max_filesize为10M以上,确保支持图片上传大小,同时后台上传目录设置777权限。
  • 确保你的请求地址是电脑局域网IP+端口,不要用localhost,手机和电脑要在同一个Wifi下。

内容的提问来源于stack exchange,提问作者Spark Nikita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:15:03