Как отправить JsonObject и список тела запроса в веб-сервис wcf с модификацией? - PullRequest
0 голосов
/ 13 января 2019

Привет! Я хочу отправить объект json и список изображений в веб-службу wcf. Я объявил функцию Post, как показано ниже

@Multipart
@POST(Post_Evaluation_Result)
Call<ResponseBody> sendEvalResultWithImages
(@Part("Username") RequestBody username,
 @Part("Password") RequestBody pass,@Part("evaluation") RequestBody jsonObject,
@Part("EvaluationDetailsImageList") List<RequestBody> EvaluationDetailsImageList);

В приведенном выше коде List<RequestBody> - это список изображений. Я пишу функцию для вызова выше функции.

   public void sendImages(List<EvaluationDetail> evaluationDetails, JSONObject jsonObject, final ResultCallBack resultCallBack){
    ApiService apiService=AppSingleton.getInstance(context).getApiService();
    List<RequestBody> requestBodies=new ArrayList<>();
    RequestBody requestFile;
    for(int i=0;i<evaluationDetails.size();i++) {
        if(evaluationDetails.get(i).getImage()!=null) {
            File file = new File(evaluationDetails.get(i).getImage());
            if (file != null) {
                InputStream inputStream=null;
                byte[] buf=null;
                try {
                    inputStream = new FileInputStream(file);
                    buf = new byte[inputStream.available()];
                    while (inputStream.read(buf) != -1) ;
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                requestFile = RequestBody.create(MediaType.parse("application/octet-stream"),buf);
                requestBodies.add(requestFile);
            }
        }
    }
    RequestBody username=RequestBody.create(MediaType.parse("text/html; charset=UTF-8"),"username");
    RequestBody password=RequestBody.create(MediaType.parse("text/html; charset=UTF-8"),"password");
    RequestBody json=RequestBody.create(MediaType.parse("application/json"),jsonObject.toString());
    if(questionIds!=null)
    apiService.sendEvalResultWithImages(username,password,json,requestBodies).enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            resultCallBack.onGetResult(null);
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            resultCallBack.onFailedGet();
        }
    });
}

Я не знаю, приведенный выше код для установки тела запроса верен или нет. Когда я вызываю веб-службу, я получаю сообщение об ошибке 404, и если я объявляю POST-вызов веб-службы, как показано ниже, я получаю ошибку неверного запроса:

@Multipart
    @POST(Post_Evaluation_Result)
    Call<ResponseBody> sendEvalResultWithImages
    (@Part("Username") String username,
     @Part("Password") String pass,@Part("evaluation") JsonObject jsonObject,
    @Part("EvaluationDetailsImageList") List<RequestBody> EvaluationDetailsImageList);

Я не знаю, где моя ошибка. пожалуйста, помогите мне

...