使用WCF服务改进POST方法获取错误代码400:错误请求

时间:2018-05-25 07:22:59

标签: android json retrofit2

我想在Retrofit中使用JSON数据调用POST方法(REST API)。 Postman和Volley库运作良好,我想在Retrofit中实现它。

我最近两天都在调查它,没有得到任何解决方案.. 我已经提到了this linkthis link以及更多看似相似但不适合我的东西......我可能会做错事......

这些是我的输入enter image description here,输出看起来像enter image description here,我的编码部分就在这里

public class Api {
private static Retrofit retrofit = null;
public static ApiInterface getClient() {


    if (retrofit==null) {
        retrofit = new Retrofit.Builder()
                .baseUrl("xxxx/Service1.svc/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    //Creating object for our interface
        ApiInterface api = retrofit.create(ApiInterface.class);
    return api; // return the APIInterface object
}}

和界面为

public interface ApiInterface {

@FormUrlEncoded
@POST("UserLogin")
Call<SignUpResponse> registration(@Field("Mobile_no") String mobile,
                                  @Field("Password") String pass,
                                  @Field("RegID") String regId);}

并将Pojo类更新为

public class SignUpResponse {


@SerializedName("UserLoginResult")
@Expose
private UserLoginResult userLoginResult;

public UserLoginResult getUserLoginResult() {
    return userLoginResult;
}

public void setUserLoginResult(UserLoginResult userLoginResult) {
    this.userLoginResult = userLoginResult;
}}class UserLoginResult {

@SerializedName("Email_id")
@Expose
private String emailId;
@SerializedName("First_name")
@Expose
private String firstName;
@SerializedName("Last_name")
@Expose
private String lastName;
@SerializedName("Message")
@Expose
private String message;
@SerializedName("Mobile_no")
@Expose
private String mobileNo;
@SerializedName("Password")
@Expose
private String password;
@SerializedName("RegID")
@Expose
private String regID;
@SerializedName("Status")
@Expose
private String status;

public String getEmailId() {
    return emailId;
}

public void setEmailId(String emailId) {
    this.emailId = emailId;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public String getMobileNo() {
    return mobileNo;
}

public void setMobileNo(String mobileNo) {
    this.mobileNo = mobileNo;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getRegID() {
    return regID;
}

public void setRegID(String regID) {
    this.regID = regID;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}}

和MainActivity

Api.getClient().registration("xxxNumberhere","rd","222").enqueue(new Callback<SignUpResponse>() {
        @Override
        public void onResponse(Call<SignUpResponse> call, Response<SignUpResponse> response) {
            signUpResponsesData = response.body();
            Toast.makeText(getApplicationContext(), response.body().getUserLoginResult().getMessage(), Toast.LENGTH_SHORT).show();
            progressDialog.dismiss();

        }

        @Override
        public void onFailure(Call<SignUpResponse> call, Throwable t) {
            Log.d("response", t.getStackTrace().toString());
            progressDialog.dismiss();

        }
    });

我的依赖是

compile 'com.squareup.retrofit2:retrofit:2.1.0'
// JSON Parsing
compile 'com.google.code.gson:gson:2.6.1'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

提前致谢..

2 个答案:

答案 0 :(得分:1)

以下课程名称和功能与我的项目相关

您可以通过

完成
df_total=df_total[(df_total.Donor_Age == donor_age)]

然后你可以发送数据,

public interface APIService {
    @POST("seq/restapi/checkpassword")
    @Headers({
        "Content-Type: application/json;charset=utf-8",
        "Accept: application/json;charset=utf-8",
        "Cache-Control: max-age=640000"
    })
    Call<Post> savePost(@Body User user);
}

您可以解析 User user = new User(); user.setUsername("abcd"); user.setPassword("password"); public void sendPost(User user) { mAPIService.savePost(user).enqueue(new Callback<Post>() { @Override public void onResponse(Call<Post> call, Response<Post> response) { if (response.isSuccessful()) { } } @Override public void onFailure(Call<Post> call, Throwable t) { } }); } by,

error 400

并添加RetrofitError类,

Gson gson = new GsonBuilder().create(); 
RetrofitError mError = gson.fromJson(response.errorBody().string(), RetrofitError.class); 
Toast.makeText(context, mError.getMessages().getError().get(0).getMessage(),Toast.LENGTH_LONG).show(); 

如果您有任何疑问,请参阅enter image description here。快乐的编码...如果有的话,随意问。 注意:添加POJO

public class RetrofitError {
    @SerializedName("messages")
    @Expose
    private Messages messages;

    public Messages getMessages() {
        return messages;
    }

    public void setMessages(Messages messages) {
        this.messages = messages;
    }
}

-------- UserLoginResult     import com.google.gson.annotations.Expose;     import com.google.gson.annotations.SerializedName;

    public class Example {

@SerializedName("UserLoginResult")
@Expose
private UserLoginResult userLoginResult;

public UserLoginResult getUserLoginResult() {
return userLoginResult;
}

public void setUserLoginResult(UserLoginResult userLoginResult) {
this.userLoginResult = userLoginResult;
}

}

答案 1 :(得分:0)

感谢您的帮助@Subin Babu

我在项目中所做的更改

1)添加了与参数

同名的POJO类
public class User {

public String getMobile_no() {
    return Mobile_no;
}

public void setMobile_no(String mobile_no) {
    Mobile_no = mobile_no;
}

public String getPassword() {
    return Password;
}

public void setPassword(String password) {
    Password = password;
}

public String getRegID() {
    return RegID;
}

public void setRegID(String regID) {
    RegID = regID;
}

private String Mobile_no;
private String Password;
private String RegID;

public User(String Mobile_no,String Password,String RegID)
{
    this.Mobile_no = Mobile_no;
    this.Password = Password;
    this.RegID = RegID;
}}

2)将ApiInterface类更新为

public interface ApiInterface {

@POST("UserLogin")
Call<SignUpResponse> registration(@Body User body);
}

3)将MainActivity类更新为

User user = new User("xxxNumber", "rd", "555");

    Api.getClient().registration(user).enqueue(new Callback<SignUpResponse>() {
        @Override
        public void onResponse(Call<SignUpResponse> call, Response<SignUpResponse> response) {
            signUpResponsesData = response.body();
        }

        @Override
        public void onFailure(Call<SignUpResponse> call, Throwable t) {

        }
    });

4)所有其他都保持不变..