当前位置: 首页 > 面试题库 >

Android改装Base64 @Body

傅兴平
2023-03-14
问题内容

大家好,我在android
4.3中有此代码,我现在正在使用改造,但是服务器向我抛出一条错误消息“输入内容不是有效的Base-64字符串,因为它包含非base
64字符,两个以上的填充字符,或填充字符中的非法字符。” 当我使用改造时

//Normal HttpClient
//Base64 String
photo = new String(b);

// Creating HTTP client
HttpClient httpClient = new DefaultHttpClient();

// Creating HTTP Post
HttpPut httpPut = new HttpPut("http://beta2.irealtor.api.iproperty.com.my.ipga.local/PhotoService/"
                    + mPropertyId + "/testWatermark"
            );

httpPut.setHeader("content-type", "application/x-www-form-urlencoded");
httpPut.setHeader("Authorization","WFdSeW8vTJ1Z3oQlBJMk53VGpaekZRY2pCd1pYSlVXU090");
httpPut.setHeader("Accept", "application/json");

httpPut.setEntity(new StringEntity(photo, "utf-8"));

HttpResponse response = httpClient.execute(httpPut);



//With retrofit
@Headers({
    "content-type:application/x-www-form-urlencoded"
})
@PUT("/PhotoService/{PROPERTYID}/{WATERMARK}") String uploadPhoto(
    @Body String photo,
    @Path("PROPERTYID") String propertyId,
    @Path("WATERMARK") String watermark);

问题答案:

对于常规对象类型(String包括),翻新将使用其Converter来序列化值。在这种情况下,默认情况下会使用Gson将正文序列化为JSON。

为了上传要使用Base64编码的数据TypedInput。这告诉Retrofit,您将向其传递已序列化的原始正文以及关联的Content- Type值。

@PUT("/PhotoService/{PROPERTYID}/{WATERMARK}")
String uploadPhoto(
    @Body TypedInput photo,
    @Path("PROPERTYID") String propertyId,
    @Path("WATERMARK") String watermark);

我将假设这bbyte[]您上面的示例中的一个。在这里,我使用的是现有的实现TypedInputTypedByteArray

TypedInput body = new TypedByteArray("application/x-www-form-urlencoded", b);
service.uploadPhoto(body, "...", "...");


 类似资料:
  • HI我只是新来的改造服务,并遵循本教程https://www.simplifiedcoding.net/retrofit-android-tutorial-to-get-json-from-server/它工作得很好,想创建我自己的,所以我使用了一个新的json网络http://api.androidhive.info/contacts/,其中包含 我实现了自己的接口ContactAPI。Java

  • 问题内容: 我正在使用OAuth,每次发出请求时,都需要将OAuth令牌放在标头中。我看到了注释,但是有没有一种方法可以对其进行参数化,以便我可以在运行时传递? 这是概念 您可以在运行时传递它们吗? 问题答案: 除了使用@Header参数之外,我还希望使用RequestInterceptor来更新您的所有请求,而无需更改您的界面。使用类似: p / s:如果使用Retrofit2,则应使用而不是

  • 我正在使用改装与我的REST API交互,并且想知道是否有人有任何设计建议。 我的应用程序包含以下软件包: 模型 服务 活动 片段 服务包包含了改造的接口。例如: 模型包含。。。嗯,不同的型号。例如,FooBar。到目前为止一切都很好——正如改装文档所示。 我已经创建了一个API类,它处理Retromet构建逻辑(etc),并公开一个静态字段:改装。在我的活动中,我可以按照以下方式执行我的请求:

  • 而我的主要 而且我有 我的json

  • 但是,如果web服务器没有回复任何东西(成功登录),那么通过改型,我会得到一个异常,因为是空的,web服务器回复的是一个简单的空字符串消息,而不是字符串数组。如果我将更改为,它就可以工作,但我不能,因为如果登录失败,它必须是一个字符串数组。

  • 借助Java 8,Base64终于得到了应有的发展。 Java 8现在具有用于Base64编码的内置编码器和解码器。 在Java 8中,我们可以使用三种类型的Base64编码。 Simple - 输出映射到位于A-Za-z0-9 + /中的一组字符。 编码器不在输出中添加任何换行,并且解码器拒绝除A-Za-z0-9 + /之外的任何字符。 URL - 输出映射到位于A-Za-z0-9 + _中的字