改造:只有@Query 在工作,但@Field 不工作

Retrofit: Only @Query is working but @Field is not working

我尝试使用 @Field@Body@POST 插入数据,但它生成 "500 internal server error" 和我尝试使用 @GET 和相同的代码@Query 然后它工作正常,数据插入成功。

那么有没有什么方法可以使用 @Body 或 @Field 将数据插入到我的 asp.net 使用 Web 服务 Web 方法的网站。

Using @Body


 @POST("/EducationApi.asmx/addEducationAPI")
    public void addEducation(@Body Education education, Callback<Education> callback);
'''

Using @Field

'''
@FormUrlEncoded
    @POST("/EducationApi.asmx/insertEducationAPI/")
    public void insertEducationDetail(@Field("user_id") int user_id, @Field("degree_name") String degree_name, @Field("institute_name") String institute_name, @Field("board_university_name") String board_university_name, @Field("year_of_passing") int year_of_passing, @Field("percentage_cgpa") float percentage_cgpa, @Field("specialization") String specialization, Callback<Education> callback);


using @Query (This works proper)


@GET("/EducationApi.asmx/insertEducationAPI")
    public void insertEducation(@Query("user_id") int user_id,@Query("degree_name") String degree_name, @Query("institute_name") String institute_name, @Query("board_university_name") String board_university_name,@Query("year_of_passing") int year_of_passing,@Query("percentage_cgpa") float percentage_cgpa,@Query("specialization") String specialization, Callback<Education> callback);

我想使用@Post将记录插入我的数据库

是可以发送带正文的数据。 Inside Body 您可以根据您的选择发送@Field 和@query 或多部分数据。

请参阅下面的代码,我在 Class 上创建,它合并 @Field 和多部分数据以进行图像上传,并通过 Body 发送所有这些数据。

public void addConactList(String name, String vessel, String email, String phone, String country, String note, String selectedfilename, ByteArrayOutputStream bos, String bvalue, String pvalue, String intrested) {
    RetroFitService retroFitService = RetrofitClient.getSalesLead();

    MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);

    builder.addFormDataPart(Const.Name, name)
            .addFormDataPart(Const.Vessel, vessel)
            .addFormDataPart(Const.Email, email)
            .addFormDataPart(Const.Phone, phone)
            .addFormDataPart(Const.Country, country)
            .addFormDataPart(Const.Notes, note)
            .addFormDataPart(Const.Photo, selectedfilename, RequestBody.create(MultipartBody.FORM, bos.toByteArray()))
            .addFormDataPart(Const.Business, bvalue)
            .addFormDataPart(Const.Probability, pvalue)
            .addFormDataPart(Const.Interest, intrested);


    RequestBody requestBody = builder.build();

    try {

        Call<ContactResponse> call = retroFitService.addCountryList(requestBody);
        call.enqueue(new Callback<ContactResponse>() {
            @Override
            public void onResponse(Call<ContactResponse> call, Response<ContactResponse> response) {
                ContactResponse msg = response.body();
                Log.e(TAG, "onResponse: " + msg.toString());
                listener.onAddContact();
            }

            @Override
            public void onFailure(Call<ContactResponse> call, Throwable t) {
                Log.e(TAG, "onFailure: " + t.toString());
                listener.onAddContact();
            }
        });

    } catch (Exception e) {
        e.printStackTrace();
    }
}

然后在我使用下面的代码从我的 activity 调用这个 class 文件方法之后。

new AddContactDetails(context, this).addConactList(name, vessel, email, phone, country, note, selectedFileName, bos, bvalue, pvalue, intrested);

您必须 Post Retrofit Service 中的 body 方法 Class 如下代码。

 @POST(Const.Add_Contact)
Call<ContactResponse> addCountryList(@Body RequestBody file);
@FormUrlEncoded
@POST("/EducationApi.asmx/insertEducationAPI/")
public void insertEducationDetail(@Field("user_id") int user_id, @Field("degree_name") String degree_name, @Field("institute_name") String institute_name, @Field("board_university_name") String board_university_name, @Field("year_of_passing") int year_of_passing, @Field("percentage_cgpa") float percentage_cgpa, @Field("specialization") String specialization, Callback<Education> callback);

我在上面的代码中犯了一个愚蠢的错误。这就是为什么它不起作用所以将上面的代码更改为下面的代码

@FormUrlEncoded
@POST("/EducationApi.asmx/insertEducationAPI")
public void insertEducationDetail(@Field("user_id") int user_id, @Field("degree_name") String degree_name, @Field("institute_name") String institute_name, @Field("board_university_name") String board_university_name, @Field("year_of_passing") int year_of_passing, @Field("percentage_cgpa") float percentage_cgpa, @Field("specialization") String specialization, Callback<Education> callback);