代号一解析
Codename one parsing
我正在努力寻找一个应该返回对象的简单方法,但使用解析(connectionRequest
、readresponse
和 postresponse
)它总是给我可以为 null 的值。
我的代码示例
Paiement P = new PaiementDAO().FindByCardNumber("5300721124642197");
System.out.println("hi "+P.getCardHolderName());
输出总是先执行 system.out.println
然后进入 findby
方法怎么了?
这是我的完整代码
` public Paiement FindByCardNumber(String CardNumber) {
Paiement P = new Paiement();
ConnectionRequest connectionRequest;
connectionRequest = new ConnectionRequest() {
List<Paiement> colors = new ArrayList<>();
@Override
protected void readResponse(InputStream input) throws IOException {
System.out.println("hi read response");
JSONParser json = new JSONParser();
try {
Reader reader = new InputStreamReader(input, "UTF-8");
Map<String, Object> data = json.parseJSON(reader);
List<Map<String, Object>> content
= (List<Map<String, Object>>) data.get("root");
colors.clear();
for (Map<String, Object> obj : content) {
colors.add(
new Paiement((String) obj.get("cardholdername"), (String) obj.get("cardnumber"), (String) obj.get("expirationdate"), (String) obj.get("securitycode"), (String) obj.get("type"), Float.parseFloat((String) obj.get("solde"))));
}
} catch (IOException err) {
}
}
@Override
protected void postResponse() {
System.out.println("hi post response");
for (Paiement x : colors) {
P = x;
System.out.println(P);
return;
}
}
};enter code here
connectionRequest.setUrl("http://localhost/payement/findbynumber.php?num=" + CardNumber);
NetworkManager.getInstance().addToQueue(connectionRequest);
return P;`
如果您的执行顺序假设是正确的——DAO.FindByCardNumber
可能 return 惰性对象或未来而不是找到一个真正的 findby
在 P
访问时执行或者在不同的线程中。
确认您应该在 System.out.println
之前调用 P.getCardHolderName()
并跟踪实际执行顺序(P
字段是在 DAO.FindBy*
还是在 P.getCardHolderName()
初始化的? ).
更新:
是的,您的 DAO 是异步的,真正的查找与主线程并行执行。所以System.out.println
提前开始,必须等待DAO请求完成。
也许你漏掉了这一行?
connectionRequest.setPost(false);
我不确定,但我认为它默认设置为 true。
我正在努力寻找一个应该返回对象的简单方法,但使用解析(connectionRequest
、readresponse
和 postresponse
)它总是给我可以为 null 的值。
我的代码示例
Paiement P = new PaiementDAO().FindByCardNumber("5300721124642197");
System.out.println("hi "+P.getCardHolderName());
输出总是先执行 system.out.println
然后进入 findby
方法怎么了?
这是我的完整代码
` public Paiement FindByCardNumber(String CardNumber) {
Paiement P = new Paiement();
ConnectionRequest connectionRequest;
connectionRequest = new ConnectionRequest() {
List<Paiement> colors = new ArrayList<>();
@Override
protected void readResponse(InputStream input) throws IOException {
System.out.println("hi read response");
JSONParser json = new JSONParser();
try {
Reader reader = new InputStreamReader(input, "UTF-8");
Map<String, Object> data = json.parseJSON(reader);
List<Map<String, Object>> content
= (List<Map<String, Object>>) data.get("root");
colors.clear();
for (Map<String, Object> obj : content) {
colors.add(
new Paiement((String) obj.get("cardholdername"), (String) obj.get("cardnumber"), (String) obj.get("expirationdate"), (String) obj.get("securitycode"), (String) obj.get("type"), Float.parseFloat((String) obj.get("solde"))));
}
} catch (IOException err) {
}
}
@Override
protected void postResponse() {
System.out.println("hi post response");
for (Paiement x : colors) {
P = x;
System.out.println(P);
return;
}
}
};enter code here
connectionRequest.setUrl("http://localhost/payement/findbynumber.php?num=" + CardNumber);
NetworkManager.getInstance().addToQueue(connectionRequest);
return P;`
如果您的执行顺序假设是正确的——DAO.FindByCardNumber
可能 return 惰性对象或未来而不是找到一个真正的 findby
在 P
访问时执行或者在不同的线程中。
确认您应该在 System.out.println
之前调用 P.getCardHolderName()
并跟踪实际执行顺序(P
字段是在 DAO.FindBy*
还是在 P.getCardHolderName()
初始化的? ).
更新:
是的,您的 DAO 是异步的,真正的查找与主线程并行执行。所以System.out.println
提前开始,必须等待DAO请求完成。
也许你漏掉了这一行?
connectionRequest.setPost(false);
我不确定,但我认为它默认设置为 true。