如何在Rest API和改造中发送和获取数据

时间:2018-08-26 12:03:44

标签: android retrofit2

我的代码:

界面:

@POST("login")
@FormUrlEncoded
Call<User> UserLogin(@Field("username") String username,@Field("password") String password);

login_activity:

Call<User> call = apiInterface.UserLogin(username,password);

rest api php:

$inputJSON = file_get_contents('php://input');
$content = json_decode( $inputJSON, TRUE );
username =$content['username'];
password =$content['password'];

但是它不起作用。 有什么问题吗?

result : null

1 个答案:

答案 0 :(得分:0)

正如@Morteza Jalambadani在您的帖子的comment中指出的那样,您正在发送FormUrlEncoded数据而不是JSON。因此,您需要像下面这样在服务器脚本中接收数据,

if (isset($_POST)) {
   username = $_POST['username'];
   password = $_POST['password'];
   // do whatever you want with the data received from client
}

如果您确实要从客户端向服务器发送JSON数据,则需要进行以下更改。

创建一个模型类(我将在此处创建Login类进行演示)

public class Login {

  private String username;
  private String password;

  public Login(String username, String password) {
    this.username = username;
    this.password = password;
  }

  // getter and setter methods if you want 
}

在API接口类中,删除@FormUrlEncoded批注并更改UserLogin()方法参数。

@POST("login")
Call<User> UserLogin(@Body Login data);  // @Body annotation from retrofit2.http.Body package

现在在您的Activity类中进行以下更改。

String username = "user_name_entered_by_user";
String password = "password_entered_by_user";

Login data = new Login(username, password);

// pass data parameter to UserLogin() method
Call<User> call = apiInterface.UserLogin(data);

服务器脚本与您在问题中发布的脚本相同。

$inputJSON = file_get_contents('php://input');
$content = json_decode( $inputJSON, TRUE );
username =$content['username'];
password =$content['password'];