【问题标题】:Posting data to get response using Retrofit使用 Retrofit 发布数据以获取响应
【发布时间】:2018-07-31 04:58:43
【问题描述】:

使用 Retrofit2 将数据发布到服务器后如何获取响应正文?

这是我的界面:

public interface UserClient {

    @FormUrlEncoded
    @POST(Constants.REGISTRATION_URL)
    Call<UserData> createAccount(
           @FieldMap Map<String, Object> map
    );
}

这是我在 MainActivity 类中的方法:

 private void createUserForm(String username, String password, String email, String deviceID, String gender, String avatarPath, int online){
        UserClient userClient = retrofit.create(UserClient.class);

        Map<String, Object> map = new HashMap<>();
        map.put("username", username);
        map.put("password", password);

        Call<UserData> call = userClient.createAccount(map);
        call.enqueue(new Callback<UserData>() {
            @Override
            public void onResponse(Call<UserData> call, Response<UserData> response) {
                // Need to get data from server after user has been inserted in database
            }

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

            }
        });
    }

这是我的 PHP 类

<?php
    include '../db/db.php';
    $username = $_POST['username'];
    $password = $_POST['password'];

if(mysqli_query($conn, "INSERT INTO users VALUES(NULL, '$username',  '$password', '$email', '$device_id', '$gender', '$avatar_path', '$online')")){
     $loginQuery = mysqli_query($conn, "SELECT * FROM users WHERE username = '".$username."' AND device_id = '".$device_id."' LIMIT 1 ");
      $row = mysqli_fetch_row($loginQuery);

        $userData['user_info'] = array(array(
            'id'       => $row[0],
            'username' => $row[1],
            'password'     => $row[2]
        ));

        print(json_encode($userData));
    }else{
        print(json_encode(null));
    }

?>

流程:

  • 正在向 Mysql 数据库插入数据。 (作品)
  • 正文中的响应也成功(作品)
  • 从 php 发送编码数据(无效)
  • 试图从 onResponse 中的 php 获取编码数据(无效)

【问题讨论】:

    标签: php android retrofit retrofit2


    【解决方案1】:

    要发送编码数据尝试使用:

    echo json_encode(['userData'=> $userData]);
    

    要检索数据,您可以在模型中实现Parcelable 接口。阅读更多here

    希望对你有帮助。

    【讨论】:

    • 请发布实现 Parcelable 的模型。您需要正确映射字段以使其正常工作...
    猜你喜欢
    • 2015-02-10
    • 1970-01-01
    • 2016-11-03
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2012-02-25
    相关资源
    最近更新 更多