当前位置: 首页 > 知识库问答 >
问题:

如何使用改装同时发送图像和文本

万俟超
2023-03-14

我想使用改造同时发送此Postdata和图像文件。

PostData和Point

public class PostData implements Serializable {
    @Expose
    private String text;
    @Expose
    private Point point;
}
public class Point implements Serializable {
    @Expose
    private double longitude;
    @Expose
    private double latitude;
}

PostApiService

public interface PostApiService {

    @Multipart
    @POST("posts/")
    Call<ResponseBody> uploadFile (@Part MultipartBody.Part part, @Body PostData postData);
}

我从这些代码中获取图像uri,并将使用它。它用作returnUri。你可以考虑这个。

代码:

view.findViewById(R.id.btn_post).setOnClickListener(new View.OnClickListener() {
    @Override
    public void PostImageAndData(View view) {

        Bitmap bitmap = null;
        try {
            bitmap = getBitmapFromUri(returnUri); #this method is to make Bitmap from Uri
        } catch (IOException e) {
            e.printStackTrace();
        }
        File imageFile = null;
        try {
            imageFile = createFileFromBitmap(bitmap); #this method is to make File from Bitmap
        } catch (IOException e) {
            e.printStackTrace();
        }

        OkHttpClient client = new OkHttpClient();
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        client = builder.build();
        Retrofit retrofit = new Retrofit.Builder()
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(Constants.HTTP.BASE_URL)
                .build();

        PostApiService postApiService = retrofit.create(PostApiService.class);
        RequestBody requestFile =
                RequestBody.create(MediaType.parse("multipart/form-data"), imageFile);
        MultipartBody.Part body =
                MultipartBody.Part.createFormData("image", makeImageFileName(), requestFile); #this method(makeimageFileName()) is for custom filename 
        Point mpoint = new Point(13, 15);
        PostData postData = new PostData("hello", mpoint);

        Call<ResponseBody> call = postApiService.uploadFile(body, postData);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                Toast.makeText(getContext(), "success?", Toast.LENGTH_LONG).show();
            }
            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
            }
        });
    }
});

如果我在PostApiService上使用@body PostData postData,错误是java.lang.IllegalArgumentException:@body参数不能与表单或多部分编码一起使用。(参数#2)

如果我在PostApiService上使用@Part PostData postData,错误是java.lang.IllegalArgumentException:@Part注释必须提供名称或使用MultipartBody.Part参数类型。(参数 #2)

那么,我该怎么办?

拜托,你能帮帮我吗?

共有1个答案

濮阳奇逸
2023-03-14

昨天我有同样的问题,我已经解决了。

它直接说两种不同的格式是不允许的。java.lang.IllegalArgumentException:@Body参数不能与表单或多部分编码一起使用。(参数#2)

您只需要以部分的形式发送所有数据。

@Multipart
@POST("/api/Accounts/editaccount")
Call<User> editUser (@Part("Authorization") String authorization,@Part("file\"; filename=\"pp.png\" ") RequestBody file , @Part("FirstName") RequestBody fname, @Part("Id") RequestBody id);

像这样的东西。

谢谢希望这对你有帮助。

 类似资料:
  • 我正在尝试使用Reform2将图像上载到服务器,但不确定如何执行。 文档让我有点困惑,我尝试了这里提到的解决方案,但它对我不起作用。 这是我当前使用的代码片段,它不会向服务器发送任何内容: 然而,我可以通过使用TypedFile对1.9进行改装来很好地做到这一点。 是我做错了什么还是Retrofit2对这种事情有什么问题?

  • 在这里,我将字段数据与FormUrlEncoded一起使用,但我必须在相同的API部分(“user\u image”)RequestBody文件中与多部分一起使用这两种数据。这怎么可能?提前谢谢。

  • 我正在测试一种使用改装库发送图像的方法。在此处的改装文件中:http://square.github.io/retrofit/有一种方法可以使用@MultiPart注释。我正在尝试像文档一样使用,但对我来说仍然不起作用。 我该怎么做? 我在努力。 Web服务php文件 Usario的侦听器 活动 例外 电子/错误:(5200):com。谷歌。格森。JsonSyntaxException:com。谷

  • 我正在尝试使用MultipartEntityBuilder和HttpURLConnection向服务器发送一个映像,然后接收一个字符串答案(现在它使用http协议,但我将使用此代码或非常类似的代码使用https来完成)。但当我按下按钮发送时,应用程序崩溃了,而logcat没有告诉我任何关于捕获的信息。下一个代码来自我执行此操作的类: 我试图解决这个问题:从浏览器下载包,然后将其粘贴到库中的文件夹/

  • 问题内容: 我的问题是可以使用ajax(jquery)将图像上传到服务器吗 以下是我的ajax脚本,无需重新加载页面即可发送文本 是否可以修改它以发送图像? 问题答案: 这可行。 是您要找的东西吗?

  • 因此,我按照如下方式进行定制。 Xamarin.from Android代码