Blackberry In App购买getExistingPurchases和PaymentEngine.CONNECTION_MODE_LOCAL显示错误

时间:2012-10-13 10:20:39

标签: blackberry

我正在使用以下代码在app app中实现。我在我的项目中添加了Blackberry paymentapi.jar。我从下面的链接中引用了这段代码:

http://docs.blackberry.com/en/developers/deliverables/20374/Developing_your_application_1326736_11.jsp#Initiating_a_purchase_1314129_11

package mypackage;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.BasicEditField;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
import net.rimlib.blackberry.api.paymentsdk.PaymentEngine;
import net.rimlib.blackberry.api.paymentsdk.PaymentException;
import net.rimlib.blackberry.api.paymentsdk.Purchase;
import net.rimlib.blackberry.api.paymentsdk.PurchaseArgumentsBuilder;

public class PurchaseDemo extends UiApplication
{
    public static void main(String[] args) 
    {
        PurchaseDemo app = new PurchaseDemo();
        app.enterEventDispatcher(); 
    }

    public PurchaseDemo() 
    {   
        pushScreen(new PurchaseDemoScreen());
    }

    private static class PurchaseDemoScreen extends MainScreen implements FieldChangeListener
    {
        private ButtonField buyButton;
        private ButtonField displayButton;
        private BasicEditField digitalGoodName;
        private BasicEditField digitalGoodSku;

        private PaymentEngine engine = PaymentEngine.getInstance();

        public PurchaseDemoScreen()
        {
            setTitle("Payment Service SDK Demo");

            if (engine != null)
            {
                engine.setConnectionMode(PaymentEngine.CONNECTION_MODE_LOCAL);

                digitalGoodName = new BasicEditField("Digital Good Name:  ", 
                    "Sample Good");
                add(digitalGoodName);

                digitalGoodSku = new BasicEditField("Digital Good SKU:   ", 
                    "abc123");
                add(digitalGoodSku);

                HorizontalFieldManager hfm = new HorizontalFieldManager();
                add(hfm);

                buyButton = new ButtonField("Buy");
                buyButton.setChangeListener(this);
                hfm.add(buyButton);

                displayButton = new ButtonField("Display Purchases");
                displayButton.setChangeListener(this);
                hfm.add(displayButton);
            }
            else
            {
                RichTextField errorMessage = new RichTextField("Sorry, in-app purchases are unavailable");
                add(errorMessage);
            }
        }

        public void fieldChanged(Field field, int context)
        {
            if (field == buyButton)
            {
                String name = digitalGoodName.getText();
                String sku = digitalGoodSku.getText();

                PurchaseArgumentsBuilder arguments = new PurchaseArgumentsBuilder()
                    .withDigitalGoodSku( sku )
                    .withDigitalGoodName( name )
                    .withMetadata( name )
                    .withPurchasingAppName( "Payment Service SDK Demo" );

                try 
                {
                    Purchase purchase = engine.purchase(arguments.build());
                    Dialog.inform("Purchase of " + purchase.getMetadata() 
                        + " is successful.");
                }
                catch (IllegalArgumentException e) 
                {
                    Dialog.inform(e.getMessage());
                }
                catch (PaymentException e) 
                {
                    Dialog.inform(e.getMessage());
                }
            }
            else if (field == displayButton)
            {
                try 
                {
                    Purchase[] purchases = engine.getExistingPurchases(true);

                    if (purchases.length != 0)
                    {
                        if (getFieldCount() > 3)
                        {
                            deleteRange(3, (getFieldCount()-3));
                        }

                        for (int i = 0; i < purchases.length; i++ )
                        {
                            RichTextField purchaseRecord = new RichTextField("Name: " 
                                + purchases[i].getMetadata() + "    SKU: " 
                                + purchases[i].getDigitalGoodSku());
                            add(purchaseRecord);
                        }
                    }
                    else
                    {
                       Dialog.inform("No existing purchases");
                    }       
                } 
                catch (PaymentException e) 
                {
                    Dialog.inform(e.getMessage());
                }
            }
        }                   
    }
}

在上面的代码中

engine.setConnectionMode(PaymentEngine.CONNECTION_MODE_LOCAL);
Purchase[] purchases = engine.getExistingPurchases(true);

显示红色错误。

1 个答案:

答案 0 :(得分:0)

不再支持PaymentEngine #setConnectionMode(): http://www.blackberry.com/developers/docs/payment/1.8api/

您仍然可以使用沙盒帐户进行测试: http://docs.blackberry.com/en/developers/deliverables/40131/Live_testing_1935047_11.jsp