大家好,我在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);
我将假设这b
是byte[]
您上面的示例中的一个。在这里,我使用的是现有的实现TypedInput
:TypedByteArray
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 + _中的字