【问题标题】:Not able to send data as json in retrofit 2 in android无法在 android 的改造 2 中以 json 格式发送数据
【发布时间】:2017-10-10 12:02:04
【问题描述】:

我无法在改造中以行 json 格式发送数据。

我将改造 1.9 迁移到 2。在改造 1.9 中,我能够使用 HashMap 发送原始 json,但在改造 2 中,我使用 HashMap,但我无法将数据作为 json 发送。 所以我改用pojo。

api 生成尝试获取非对象属性的日志,因此我无法在行 json 中传递数据。

我刚刚在 error_log 中看到我的服务器详细信息,我的请求自动转换为 GET。我使用retrofit2、retrofit 1.9、volly any Asynctask 在POST 中传递数据。我不知道为什么我的服务器被当作 GET。 从邮递员那里,它工作得很好。

任何帮助都会对我有用。 谢谢

这是我的代码

我的 pojo 类请求

  public class RegisterdUserData {

@SerializedName("userEmail")
@Expose
private String userEmail;
@SerializedName("userName")
@Expose
private String userName;
@SerializedName("firstName")
@Expose
private String firstName;
@SerializedName("lastName")
@Expose
private String lastName;
@SerializedName("userPassword")
@Expose
private String userPassword;
@SerializedName("userRole")
@Expose
private String userRole;

public String getUserEmail() {
    return userEmail;
}

public void setUserEmail(String userEmail) {
    this.userEmail = userEmail;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

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 getUserPassword() {
    return userPassword;
}

public void setUserPassword(String userPassword) {
    this.userPassword = userPassword;
}

public String getUserRole() {
    return userRole;
}

public void setUserRole(String userRole) {
    this.userRole = userRole;
}

请求

@Headers("Content-Type: application/json")
@POST("/api/CreateUser.php")
Call<AppUserData> CreateUser(@Body RegisterdUserData registerdUserData); 

我的电话

 private void CreateUser(String userEmail, String firstName, String lasName, String userName, String userPassword, String userRole) {

    RegisterdUserData registerdUserData = new RegisterdUserData();
    registerdUserData.setFirstName(firstName);
    registerdUserData.setLastName(lasName);
    registerdUserData.setUserEmail(userEmail);
    registerdUserData.setUserName(userName);
    registerdUserData.setUserPassword(userPassword);
    registerdUserData.setUserRole(userRole);
    util.http.CreateUser(registerdUserData).enqueue(new Callback<AppUserData>() {
        @Override
        public void onResponse(Call<AppUserData> call, Response<AppUserData> response) {
            util.log(TAG, "" + response);
        }

        @Override
        public void onFailure(Call<AppUserData> call, Throwable t) {
            util.log(TAG, "" + t);
        }
    });
}

【问题讨论】:

  • 尝试将@POST("/api/CreateUser.php")更改为@POST("api/CreateUser.php")
  • 没有帮助。 @AshutoshSagar

标签: android json retrofit2


【解决方案1】:

问题在于 www。如果我要删除它,那么它工作正常。我不知道为什么。但它帮助了我。 感谢您的回复@Manikanta @AshutoshSaga

【讨论】:

    【解决方案2】:

    我建议你以Map&lt;String,Object&gt;的形式发送数据

    在你的情况下:

    Map<String,Object> requestBody = new HashMap()<>;
    requestBody.put("userInfo", registerdUserData);
    

    您的要求应该是:

    @Headers("Content-Type: application/json")
    @POST("/api/CreateUser.php")
    Call<AppUserData> CreateUser(@Body Map<String,Object> registerdUserData); 
    

    还要交叉检查改造对象是如何构建的(在我的例子中是杰克逊)。

    Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addConverterFactory(JacksonConverterFactory.create())
                    .client(client)
                    .build();
    

    如果您有任何疑问,请发表评论。

    【讨论】:

    • 同样的错误。我正在为 addConverterFactory 使用 gson。这个错误有关系吗?
    • 试试 JacksonConvertorFactory。和 Map 作为一个值得的请求体!!.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多