Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript GWT HashMap.put()不向HashMap添加数据_Javascript_Java_Gwt_Hashmap - Fatal编程技术网

Javascript GWT HashMap.put()不向HashMap添加数据

Javascript GWT HashMap.put()不向HashMap添加数据,javascript,java,gwt,hashmap,Javascript,Java,Gwt,Hashmap,我有一个在LibGDX中创建的游戏,它使用GWT构建HTML5版本。我有一个hashmap,我用它来记录购买,有些购买被多次处理。查看后,我发现这是因为它们没有被添加到hashmap中。将进程添加到hashmap的逻辑如下(在桌面、iOS和Android版本上都可以正常工作): 这将产生以下输出 GWT: WBLOG: Double Purchase: In updatePurchase 787349198062445 GWT: WBLOG: Double Purchase: 1 GWT: WB

我有一个在LibGDX中创建的游戏,它使用GWT构建HTML5版本。我有一个hashmap,我用它来记录购买,有些购买被多次处理。查看后,我发现这是因为它们没有被添加到hashmap中。将进程添加到hashmap的逻辑如下(在桌面、iOS和Android版本上都可以正常工作):

这将产生以下输出

GWT: WBLOG: Double Purchase: In updatePurchase 787349198062445
GWT: WBLOG: Double Purchase: 1
GWT: WBLOG: Double Purchase: 2
GWT: WBLOG: Double Purchase: 3 false
GWT: WBLOG: Double Purchase: 4 false
GWT: WBLOG: Double Purchase: 5 false
GWT: WBLOG: Double Purchase: Leave updatePurchase 787349198062445
特别注意日志第4行和第5行,hashmap不包含键
orderNo
。然后我调用
put
,在下一行,hashmap仍然不包含键
orderNo

这件事真让我难堪。我在整个游戏中都使用hashmaps,这是唯一一个没有按预期工作的。控制台中没有报告任何错误,并且似乎没有发生其他意外情况

编辑 我决定试试这个:

        while (!purchases.containsKey(orderNo)) {
            Gdx.app.log("Double Purchase", "Trying to add purchase " + count++);
            purchases.put(orderNo, purchase);
        }
它只是陷入了一个无限循环。这是一个非常顽固的
HashMap

编辑 下一个有趣的问题。用于
orderNo
字符串
作为
JavaScriptObject
的一部分从Facebook SDK返回。代码如下:

public class PurchaseResponse extends JavaScriptObject {
    protected PurchaseResponse() {
    }

    public final native String getPaymentId() /*-{
        return this.payment_id;
    }-*/;

    public final native double getAmount() /*-{
        return this.amount;
    }-*/;

    public final native String getCurrency() /*-{
        return this.currency;
    }-*/;

    public final native int getQuantity() /*-{
        return this.quantity;
    }-*/;

    public final native String getRequestId() /*-{
        return this.request_id;
    }-*/;

    public final native String getStatus() /*-{
        return this.status;
    }-*/;

    public final native String getSignedRequest() /*-{
        return this.signed_request;
    }-*/;
}

我在尝试对这个字符串执行
indexOf()
时遇到一个异常,消息是
indexOf()
方法不存在
indexOf()
确实存在,并且在GWT中正常字符串上运行良好。这根绳子有什么特别之处?我尝试过使用新的
字符串(orderNo)
,但新字符串也没有按预期工作。

解决了!根据报告,JSON响应如下:

{
  payment_id: "495869257196092",
  amount: "5.00",
  currency: "USD",
  quantity: "1", 
  request_id: "60046727",
  status: "completed", 
  signed_request: "7QYHzKqKByA7fjiqJUh2bxFvEdqdvn0n_y1zYiyN6tg.eyJhbGCJxdWFudGl0eSI6IjEiLCJzdGF0dXMiOiJjb21wbGV0ZWQifQ"
}
但在检查实际的JSON响应时,是这样的:

{  
   "payment_id":795448840585614,
   "amount":"0.79",
   "currency":"GBP",
   "quantity":"1",
   "request_id":"xxxx",
   "status":"completed",
   "signed_request":"xxx"
}

请注意关键的区别
payment\u id
是一个数值,而不是一个
字符串
,因此缺少的函数以及它没有作为
字符串
执行的事实应该是这样的。

是否在右侧对象上同步?如果
purchases
变量不是
this
的实例字段,则可以在不同的对象上锁定多个线程;i、 e.没有互斥和不正确的同步。@StephenC这是一个实例字段,因为这是GWT,所以无论如何都是单线程的,所以同步应该没有效果。
put()
调用是否从不向
HashMap
添加项,或者只是在某些情况下?如果是后者,您能确定案例之间的相似性吗?您确定购买是一个java.util.HashMap吗?在经典的devmode中,我无法重现这种行为。几分钟后,我在生产模式下尝试:)@WillCalderwood我的测试以字符串作为关键,在开发和生产模式下工作。你能不能也算出购买的数量?很高兴你算出了!
{  
   "payment_id":795448840585614,
   "amount":"0.79",
   "currency":"GBP",
   "quantity":"1",
   "request_id":"xxxx",
   "status":"completed",
   "signed_request":"xxx"
}