Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用改型android捕获图像和发布数据_Android_Retrofit2 - Fatal编程技术网

如何使用改型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