如何在车身上发送2个参数进行改装?

时间:2019-07-17 22:45:33

标签: java android retrofit

大家晚安。 我需要执行POST请求,并且正在使用Retrofit 2来执行此操作。 但是我正在使用的Api并没有在API响应中为我提供这些参数,只是在正文中。

Api响应

API response Image

我已经在某些地方搜索过,但是没有找到任何可以帮助我的东西。

我的界面类

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) {

    }
}

我希望我已经阐明了我的问题,并且已经过这个问题的人可以帮助我。 欣赏。

2 个答案:

答案 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) {
    }
}