代号解析一个

时间:2016-12-12 10:08:43

标签: java json codenameone

我正在努力使用一个简单的方法来回馈一个对象但是使用解析(connectionRequestreadresponsepostresponse)它总是给我可以为空的值。

我的代码示例

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;`

2 个答案:

答案 0 :(得分:1)

如果您的执行顺序假设是正确的 - @Reference public void setContentLocalServiceUtil(DDMContentLocalServiceUtil contentLocalServiceUtil) { this.contentLocalServiceUtil = contentLocalServiceUtil; } 可能会返回惰性对象或将来而不是找到的对象,并且DAO.FindByCardNumber访问时或不同线程中执行真实findby。 / p>

要确认您应在P之前调用P.getCardHolderName()并跟踪实际执行顺序(System.out.printlnP初始化DAO.FindBy*字段?

<强>更新

是的,你的DAO是异步的,真正的find与主线程并行执行。所以P.getCardHolderName()提前开始,必须等待DAO请求完成。

答案 1 :(得分:1)

也许你错过了这一行?

connectionRequest.setPost(false);

我不确定,但我认为默认设置为true。