如何通过okhttps在android studio中上载多个文件仅上载最后一个文件

如何通过okhttps在android studio中上载多个文件仅上载最后一个文件,android,android-studio,okhttp3,Android,Android Studio,Okhttp3,我正在使用OK3将多个文件上载到服务器 但它总是上传最后一个文件,而不是所有文件 我的代码在下面 解释代码:- 1.从共享首选项获取用户id 2.创建HTTPS客户端 3检查文件是否不为空 4.创建multipartbody以添加参数和数据 5.为参数中的文件创建一个for循环 6.调用请求主体并获取响应 public static void TaskAdd(final Activity activity, final String task_title, final String employ

我正在使用OK3将多个文件上载到服务器 但它总是上传最后一个文件,而不是所有文件 我的代码在下面

解释代码:-

1.从共享首选项获取用户id

2.创建HTTPS客户端

3检查文件是否不为空

4.创建multipartbody以添加参数和数据

5.为参数中的文件创建一个for循环

6.调用请求主体并获取响应

public static void TaskAdd(final Activity activity, final String task_title, final String employees, final String priority, final String add_due_date, final String task_detail, final File[] file, final FragmentManager fragmentManager, final Dialog dialog) {
        dialog.show();
        Log.d(TAG, "sendImage: Enter");
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext());
        final String UserId = settings.getString("UserId", "");

        OkHttpClient client = new OkHttpClient();
        Request request;

        // MultipartBody requestBody;
        if (file != null) {
            MultipartBody.Builder body = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("task_title", task_title)
                    .addFormDataPart("employees", employees)
                    .addFormDataPart("priority", priority)
                    .addFormDataPart("add_due_date", add_due_date)
                    .addFormDataPart("task_detail", task_detail)
                    .addFormDataPart("user_id", UserId);
           // body.addFormDataPart("files", file[i].getName(), RequestBody.create(MediaType.parse("Image/*"), file[i]));
//            MultipartBody.Builder body2[]=new MultipartBody.Builder[file.length];
//
//            for  (int i=0;i<file.length;i++) {
//                 body2[i]= body.addFormDataPart("files", file[i].getName(), RequestBody.create(MediaType.parse("Image/*"), file[i]));
//            }

            for (int i = 0; i < file.length; i++) {
                Log.d(TAG, "TaskAdd: File " + file[i]);
                if (file[i].exists()) {
                    Log.d(TAG, "TaskAdd: "+i);
                    //body.addPart()
                    body.addFormDataPart("files", file[i].getName(), RequestBody.create(MediaType.parse("Image/*"), file[i]));
                    body.addFormDataPart("files", file[i].getName(), RequestBody.create(MediaType.parse("Image/*"), file[i]));

                    Log.d(TAG, "TaskAdd: "+ body.getClass().getName());
                } else {
                    Log.d(TAG, "TaskAdd: No file found");
                }
            }

            MultipartBody  requestBody = body.build();
            request = new Request.Builder().url("http://www.****.com/web/aagam/public/add_update_tasks").post(requestBody).build();
        } else {
            RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("task_title", task_title)
                    .addFormDataPart("employees", employees)
                    .addFormDataPart("priority", priority)
                    .addFormDataPart("add_due_date", add_due_date)
                    .addFormDataPart("task_detail", task_detail)
                    .addFormDataPart("user_id", UserId)
                    .build();
            request = new Request.Builder().url("http://www.****.com/web/aagam/public/add_update_tasks").post(body).build();
        }


        client.newCall(request).enqueue(new okhttp3.Callback() {
            @Override
            public void onFailure(okhttp3.Call call, IOException e) {
                dialog.dismiss();
                Log.d(TAG, "OK HTTP 3.0 onFailure: ");

                activity.runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(activity, "Server Speed Slow please Try After SomeTime", Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override
            public void onResponse(okhttp3.Call call, final okhttp3.Response response) throws IOException {
                dialog.dismiss();
                final String responseBody = response.body().string().toString();
                Log.d(TAG, "response    " + responseBody);

                activity.runOnUiThread(new Runnable() {
                    public void run() {

                        try {

                            JSONObject jsonObject = new JSONObject(responseBody);
                            String success = jsonObject.getString("success");
                            String message = jsonObject.getString("message");

                            if (success.equals("1")) {
                                Toast.makeText(activity, "Task added successfully", Toast.LENGTH_SHORT).show();
                                fragmentManager.popBackStack();
                            } else {
                                if (message.equalsIgnoreCase("Task added successfully")) {
                                    Toast.makeText(activity, "Successful add task", Toast.LENGTH_SHORT).show();
                                    fragmentManager.popBackStack();
                                } else {
                                    Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
                                }
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        });
    }
public static void TaskAdd(最终活动活动、最终字符串任务标题、最终字符串员工、最终字符串优先级、最终字符串添加到期日期、最终字符串任务详细信息、最终文件[]文件、最终碎片管理器碎片管理器、最终对话框){
dialog.show();
Log.d(标记“sendImage:Enter”);
SharedReferences设置=PreferenceManager.GetDefaultSharedReferences(activity.getApplicationContext());
最终字符串UserId=settings.getString(“UserId”,即“”);
OkHttpClient=新的OkHttpClient();
请求;
//多主体请求主体;
如果(文件!=null){
MultipartBody.Builder body=新的MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(“任务标题”,任务标题)
.addFormDataPart(“员工”,员工)
.addFormDataPart(“优先级”,优先级)
.addFormDataPart(“添加到期日”,添加到期日)
.addFormDataPart(“任务详细信息”,任务详细信息)
.addFormDataPart(“用户id”,用户id);
//body.addFormDataPart(“文件”,文件[i].getName(),RequestBody.create(MediaType.parse(“Image/*”),文件[i]);
//MultipartBody.Builder body2[]=新的MultipartBody.Builder[file.length];
//

//对于(int i=0;i您通过传递相同的名称来覆盖相同的文件,请将其更改为file[]或作为file1和file2传递

 for (int i = 0; i < file.length; i++) {
                    Log.d(TAG, "TaskAdd: File " + file[i]);
                    if (file[i].exists()) {
                        Log.d(TAG, "TaskAdd: "+i);
                        //body.addPart()
                        body.addFormDataPart("files["+i+"]", file[i].getName(), RequestBody.create(MediaType.parse("Image/*"), file[i]));

                        Log.d(TAG, "TaskAdd: "+ body.getClass().getName());
                    } else {
                        Log.d(TAG, "TaskAdd: No file found");
                    }
                }
for(int i=0;i
可能吗?我的API参数“files”,但在您的情况下,它是数组“files[“+i+”]”的参数,您需要修改API,或者您可以使用`body.addFormDataPart(“files”+i,file[i].getName(),RequestBody.create(MediaType.parse(“Image/*”),file[i]),将两个文件作为两个不同的名称传递,如files1和files2`