小编Cra*_*hon的帖子

事务在finishTransaction之后返回:已被调用

我正在使用应用程序内购买iPhone应用程序.我有一个充当SKProductsRequestDelegate和的类SKPaymentTransactionObserver,并且它在iTunes上当前发布的版本中都运行良好.

但是,在最近添加一个新的非消耗品并在Sandbox环境中进行测试之后,我现在遇到了一个奇怪的问题.每次我启动应用程序时,我昨天的购买重新出现在传递给我的交易列表中paymentQueue:updatedTransactions:,尽管事实上我已经打过电话[[SKPaymentQueue defaultQueue] finishTransaction:transaction](好几次).这是亡灵!

在我的paymentQueue:updatedTransactions:实施中,我有:

for (SKPaymentTransaction* transaction in transactions) 
    switch (transaction.transactionState)
    {
        case SKPaymentTransactionStatePurchased:
        case SKPaymentTransactionStateRestored:
        {
            ....
                DDLog(@"Transaction for %@ occurred originally on %@.", transaction.payment.productIdentifier, transaction.originalTransaction.transactionDate);
                ....
Run Code Online (Sandbox Code Playgroud)

然后我处理购买,下载用户内容,最后,在另一种方法中,执行以下操作:

for (SKPaymentTransaction* transaction in [[SKPaymentQueue defaultQueue] transactions])         
            if (([transaction.payment.productIdentifier isEqualToString:theParser.currentProductID]) &&
                 ((transaction.transactionState==SKPaymentTransactionStatePurchased) || (transaction.transactionState==SKPaymentTransactionStateRestored))
               )
            {
                DDLog(@"[[ Transaction will finish: product ID = %@; date = %@ ]]", transaction.payment.productIdentifier, transaction.transactionDate);
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            }
Run Code Online (Sandbox Code Playgroud)

您可能已经注意到,为了简单起见,我并没有坚持原始的事务对象,并且稍后从调用中找到它相对容易[[SKPaymentQueue defaultQueue] transactions].无论如何,我确实看到了预期的输出; 交易已完成,并且与产品ID和原始交易日期完全匹配.但是,下次我运行应用程序时,整个事情重新开始!就像iTunes …

iphone in-app-purchase

23
推荐指数
3
解决办法
2万
查看次数

三星Galaxy Android 7上的建议弹出窗口中出现空指针异常

我看到我的应用程序中经常发生异常崩溃,但仅限于运行Android 7的三星Galaxy设备.由于我的应用程序代码没有在堆栈跟踪中显示,我发现很难找到缺少外出和购买这些昂贵的设备之一.这里有线索吗?

它似乎是与输入控件关联的建议弹出窗口内发生的内部错误,可能是EditText我应用程序主屏幕上的功能.这EditText不应该是提出建议,因为我也在使用

searchBox.setImeOptions(EditorInfo.IME_ACTION_SEARCH | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
        searchBox.setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪如下:

java.lang.NullPointerException: 
    at android.widget.Editor$SuggestionsPopupWindow.initContentView(Editor.java:3729)
    at android.widget.Editor$PinnedPopupWindow.<init>(Editor.java:3390)
    at android.widget.Editor$SuggestionsPopupWindow.<init>(Editor.java:3675)
    at android.widget.Editor.replace(Editor.java:431)
    at android.widget.Editor$3.run(Editor.java:2354)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6776)
    at java.lang.reflect.Method.invoke(Native Method:0)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Run Code Online (Sandbox Code Playgroud)

android galaxy android-edittext android-7.0-nougat

11
推荐指数
1
解决办法
1222
查看次数