Есть 3 класса: ApiConfig
, ApiData
и ApiSteps
.
В ApiConfig
инициализирована переменная appId.
В ApiData
он используется в конструкторе для отправки json.
В ApiSteps
в методе получается ее значение из ответа json.
Затем в другом методе отправляется json из ApiData
уже с новым значением.
Проблема в том, что отправляется id: 0. Хотя если присвоить ей вручную значение в ApiConfig
, то все ок.
Как сделать так, чтобы значение, полученное в методе, сохранялось и передавалось в теле json?
class ApiConfig
{
int appId;
String getProd = url + path + "/loans/orders";
String sendApp = url + path + "/loans/orders/" + appId + "/send";
}
class ApiData
{
class Items
{
String name;
String quantity;
String price;
Items (String name, String quantity, String price)
{
this.name = name;
this.quantity = quantity;
this.price = price;
}
}
class Cart
{
List <Items> items;
String shop_order_id;
int total_price;
Cart (List <Items> items, String shop_order_id, int total_price)
{
this.items = items;
this.shop_order_id = shop_order_id;
this.total_price = total_price;
items.add (new Items ("Смартфон Apple iPhone", "1", "70000"));
}
}
List <Items> items = new ArrayList <> ();
Cart cart = new Cart (items, "demoPage_338191", 70000);
String cartObj = apiConfig.gson.toJson (cart);
class Application_express
{
String name;
String surname;
String patronymic;
String sex;
String birthday;
String cell_phone;
String email;
int employment_income;
String document_series;
String document_number;
String document_date;
int loan_period;
boolean sms_notification;
boolean life_insurance;
boolean work_insurance;
boolean deferred_payment;
int initial_payment;
Application_express (String name, String surname, String patronymic, String
sex, String birthday, String cell_phone, String email, int
employment_income, String document_series,
String document_number, String document_date, int loan_period, boolean
sms_notification, boolean life_insurance, boolean work_insurance, boolean
deferred_payment, int initial_payment)
{
this.name = name;
this.surname = surname;
this.patronymic = patronymic;
this.sex = sex;
this.birthday = birthday;
this.cell_phone = cell_phone;
this.email = email;
this.employment_income = employment_income;
this.document_series = document_series;
this.document_number = document_number;
this.document_date = document_date;
this.loan_period = loan_period;
this.sms_notification = sms_notification;
this.life_insurance = life_insurance;
this.work_insurance = work_insurance;
this.deferred_payment = deferred_payment;
this.initial_payment = initial_payment;
}
}
Application_express application_express = new Application_express ("Иван",
"Иванов", "Иванович", "1", "1990-01-01", "9031111112", "ivan@mail.ru",
100000, "4528", "123456", "2019-01-01", 12, false,
false, false, true, 0);
String appExpObj = apiConfig.gson.toJson (application_express);
class Orders
{
Cart cart;
Application_express application_express;
Orders (Cart cart, Application_express application_express)
{
this.cart = cart;
this.application_express = application_express;
}
}
Orders orders = new Orders (cart, application_express);
String orderObj = apiConfig.gson.toJson (orders);
class Product
{
int product_id;
Product (int product_id)
{
this.product_id = product_id;
}
}
class Application
{
int id;
List <Product> products;
Cart cart;
Application_express application_express;
Application (int id, List <Product> products, Cart cart,
Application_express application_express)
{
this.id = id;
this.products = products;
this.cart = cart;
this.application_express = application_express;
products.add (new Product (163));
products.add (new Product (145));
products.add (new Product (146));
products.add (new Product (151));
products.add (new Product (161));
products.add (new Product (165));
}
}
List <Product> products = new ArrayList <> ();
Application Application = new Application (apiConfig.appId, products,
cart, application_express);
String appObj = apiConfig.gson.toJson (Application);
}
class ApiSteps
{
void getProd ()
{
apiConfig.request.body (apiData.orderObj);
apiConfig.request.header ("Content-Type", contType);
apiConfig.response = apiConfig.request.post (apiConfig.getProd);
statCode = apiConfig.response.getStatusCode ();
Assert.assertEquals (statCode, apiData.statCode);
statLine = apiConfig.response.getStatusLine ();
Assert.assertEquals (statLine, apiData.statLine);
contType = apiConfig.response.getContentType ();
Assert.assertEquals (contType, apiData.contType);
apiConfig.responseBody = apiConfig.response.getBody ();
responseBodyAsString = apiConfig.responseBody.asString ();
Assert.assertEquals (true, responseBodyAsString.contains ("id"));
Assert.assertEquals (true, responseBodyAsString.contains ("credit_period"));
Assert.assertEquals (true, responseBodyAsString.contains ("credit_size"));
Assert.assertEquals (true, responseBodyAsString.contains ("initial_payment"));
Assert.assertEquals (true, responseBodyAsString.contains ("payment"));
apiConfig.jsonPath = apiConfig.response.jsonPath ();
apiConfig.setAppId (apiConfig.jsonPath.get ("id"));
apiData.Application.id = apiConfig.jsonPath.get ("id");
apiData.appObj = apiConfig.gson.toJson (apiData.Application);
apiData.products = apiConfig.jsonPath.get ("products.product.id");
}
void sendApp ()
{
apiConfig.request.body (apiData.appObj);
System.out.println (apiData.appObj);
apiConfig.request.header ("Content-Type", contType);
apiConfig.response = apiConfig.request.post (apiConfig.sendApp);
statCode = apiConfig.response.getStatusCode ();
Assert.assertEquals (statCode, apiData.statCode);
statLine = apiConfig.response.getStatusLine ();
Assert.assertEquals (statLine, apiData.statLine);
contType = apiConfig.response.getContentType ();
Assert.assertEquals (contType, apiData.contType);
apiConfig.responseBody = apiConfig.response.getBody ();
responseBodyAsString = apiConfig.responseBody.asString ();
}
}
Проблема в инициализации переменной sendApp
:
String sendApp = url + path + "/loans/orders/" + appId + "/send";
Она инициализируется, когда вызывается конструктор класса ApiConfig
, в этот момент appId
не проинициализирована и компилятор подставляет значение 0 (хотя в теории может быть любое значение, так как состояние не определено).
Всякий раз когда вы меняете appId
, строка sendApp
, остаётся прежней.
Вам необходим метод сеттер, в котором вы будете менять строку sendApp
.
public void setAppId(int id){
appId = id;
sendApp = url + path + "/loans/orders/" + appId + "/send";
}
Проблема решена изменением объекта:
apiConfig.jsonPath = apiConfig.response.jsonPath ();
apiConfig.setAppId (apiConfig.jsonPath.get ("id"));
apiData.Application.id = apiConfig.jsonPath.get ("id");
apiData.appObj = apiConfig.gson.toJson (apiData.Application);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть SurfaceView с отрисокой изображений onDraw()Все работает отлично, подскажите как выполнить анимацию этого bitmap на канвасе
Уважаемые специалисты, бьюсь вот уже несколько часовЗадача, генерировать динамически список с помощью кастомного адаптера, проверять чтобы...
При запуске клиент-серверного приложения ЧАТА вылетает ошибка, указанная в заголовке