如何使用改型android捕获图像和发布数据
我在推送数据时出错,错误是:如何使用改型android捕获图像和发布数据,android,retrofit2,Android,Retrofit2,我在推送数据时出错,错误是: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.oakridgebs.dealsinmall, PID: 3414 java.lang.IllegalArgumentException: Only one encoding annotation is allowed. for method ClickAndPostApi.clicPost at retrofit2.Utils.methodEr
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.oakridgebs.dealsinmall, PID: 3414
java.lang.IllegalArgumentException: Only one encoding annotation is allowed.
for method ClickAndPostApi.clicPost
at retrofit2.Utils.methodError(Utils.java:52)
at retrofit2.Utils.methodError(Utils.java:42)
at retrofit2.RequestFactory$Builder.parseMethodAnnotation(RequestFactory.java:227)
at retrofit2.RequestFactory$Builder.build(RequestFactory.java:161)
at retrofit2.RequestFactory.parseAnnotations(RequestFactory.java:65)
at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:25)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:168)
at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
at java.lang.reflect.Proxy.invoke(Proxy.java:913)
at $Proxy9.clicPost(Unknown Source)
at com.oakridgebs.dealsinmall.ClickAndPostActivity$1.onClick(ClickAndPostActivity.java:134)
at android.view.View.performClick(View.java:6392)
at android.view.View$PerformClick.run(View.java:25121)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:197)
at android.app.ActivityThread.main(ActivityThread.java:7022)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:515)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:837)
这是我的界面
@Multipart
@FormUrlEncoded
@POST("click_and_posts")
Call<ResponseBody> clicPost(
@Header("Token") String token, // if there is headers
@Part MultipartBody.Part file,
@Field("click_and_post[category_id]") String category_id,
@Field("click_and_post[brand_id]") String brand_id,
@Field("click_and_post[location]") String location
);
在这张照片中,我正在拍摄照片,我正在通过,如下所示
我的代码是
File originalFile = FileUtils.getFile(getApplicationContext(), photoUri);
RequestBody filePart = RequestBody.create(MediaType.parse(getContentResolver().getType(photoUri)),
originalFile);
MultipartBody.Part file = MultipartBody.Part.createFormData("click_and_post[image]", originalFile.getName(), filePart);
Call<ResponseBody> call = LoginSignupClients.getInstance().getApiClickandPost().clicPost(token, file, category_id, brand_id, location );
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.code() == 200){
Toast.makeText(ClickAndPostActivity.this, "You Posted the Deal Sucessfully", Toast.LENGTH_LONG).show();
Intent intent = new Intent(ClickAndPostActivity.this, DashboardActivity.class);
startActivity(intent);
finish();
}else {
Toast.makeText(ClickAndPostActivity.this, "Unable to post Your Data", Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Toast.makeText(ClickAndPostActivity.this, t.getMessage(), Toast.LENGTH_LONG).show();
}
});
File originalFile=FileUtils.getFile(getApplicationContext(),photoUri);
RequestBody filePart=RequestBody.create(MediaType.parse(getContentResolver().getType(photoUri)),
原始文件);
MultipartBody.Part文件=MultipartBody.Part.createFormData(“单击并发布[图像]”,originalFile.getName(),filePart);
Call Call=LoginSignupClients.getInstance().getApiClickandPost().clicPost(令牌、文件、类别标识、品牌标识、位置);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.code()==200){
Toast.makeText(ClickAndPostActivity.this,“您成功发布了交易”,Toast.LENGTH\u LONG.show();
意向意向=新意向(单击和PostActivity.this,DashboardActivity.class);
星触觉(意向);
完成();
}否则{
Toast.makeText(ClickAndPostActivity.this,“无法发布数据”,Toast.LENGTH_LONG.show();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(ClickAndPostActivity.this,t.getMessage(),Toast.LENGTH\u LONG.show();
}
});
或者是否有任何方法可以传递位图。您能帮我一下吗?在描述的错误中,它只能使用一个编码注释,因此请尝试删除以下注释:
@FormUrlEncoded
在您的界面中您需要将所有参数作为部分注释传递。如果您的请求类型是多部分的,则其中的所有参数都应使用
@Part
进行注释。然后,我可以使用insted oof@Field,因为我收到错误“@Field参数只能与表单编码一起使用”我认为API使用的标头与您为发送数据所做的设置不兼容。
@FormUrlEncoded