大家晚安。 我需要执行POST请求,并且正在使用Retrofit 2来执行此操作。 但是我正在使用的Api并没有在API响应中为我提供这些参数,只是在正文中。
Api响应
我已经在某些地方搜索过,但是没有找到任何可以帮助我的东西。
我的界面类
public interface LoginApi {
@POST("api/login")
Call<UserAccount> doLogin(@Body Login login);
}
我的模型课程
public class Login {
public String user;
public String password;
}
我的API响应类
public class UserAccount {
@SerializedName("userId")
@Expose
private Integer userId;
@SerializedName("name")
@Expose
private String name;
@SerializedName("bankAccount")
@Expose
private String bankAccount;
@SerializedName("agency")
@Expose
private String agency;
@SerializedName("balance")
@Expose
private Double balance;
}
我的通话班
public class LoginPresenter {
private LoginView loginView;
private ServiceConfig serviceConfig;
public LoginPresenter() {
this.loginView = loginView;
if (this.serviceConfig == null) {
this.serviceConfig = new ServiceConfig();
}
}
public void doLogin(Login login) {
serviceConfig
.login()
.doLogin(login)
.enqueue(new Callback<UserAccount>() {
@Override
public void onResponse(Call<UserAccount> call, Response<UserAccount> response) {
UserAccount userAccount = response.body();
assert userAccount != null;
Log.e("Agency:",userAccount.getAgency());
Log.e("BankAccount:", userAccount.getBankAccount());
Log.e("Name:", userAccount.getName());
}
@Override
public void onFailure(Call<UserAccount> call, Throwable t) {
Log.d("Erro", t.getMessage());
}
});
}
}
我的活动
public class LoginActivity extends Activity implements LoginView {
private EditText edtUser, edtPassword;
private Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
init();
}
private void init() {
edtUser = findViewById(R.id.edt_user);
edtPassword = findViewById(R.id.edt_password);
btnLogin = findViewById(R.id.btn_login);
final LoginPresenter loginPresenter = new LoginPresenter();
final Login login = new Login();
login.user = edtUser.getText().toString();
login.password = edtPassword.getText().toString();
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
loginPresenter.doLogin(login);
}
});
}
@Override
public void userAccount(List<UserAccount> userAccount) {
}
}
我希望我已经阐明了我的问题,并且已经过这个问题的人可以帮助我。 欣赏。
答案 0 :(得分:0)
通过@Body JsonObject body
而不是@Body Login login
这里是完整代码:
您的界面将是:
public interface LoginApi {
@POST("api/login")
Call<UserAccount> doLogin(@Body JsonObject body);
}
如何创建JsonObject:
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("user", userValue);
jsonObject.addProperty("password", passwordValue);
将其从您的活动传递给演示者。
希望它对您有用。
谢谢。
答案 1 :(得分:0)
像这样通过:-
您的界面
public interface ApiInterface {
String URL_BASE = "Base Url";
@Headers("Content-Type: application/json")
@POST("login")
Call<User> getUser(@Body String body);
}
活动
public class SampleActivity extends AppCompatActivity implements Callback<User> {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ApiInterface.URL_BASE)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiInterface apiInterface = retrofit.create(ApiInterface.class);
// prepare call in Retrofit 2.0
try {
JSONObject paramObject = new JSONObject();
paramObject.put("email", "sample@gmail.com");
paramObject.put("pass", "4384984938943");
Call<User> userCall = apiInterface.getUser(paramObject.toString());
userCall.enqueue(this);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onResponse(Call<User> call, Response<User> response) {
}
@Override
public void onFailure(Call<User> call, Throwable t) {
}
}