改造:只有@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);
我尝试使用 @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);