android - 如何在应用内计费应用程序android中调用getpurchase方法?

标签 android in-app-purchase in-app-billing billing android-billing

我已经在我的应用程序中实现了应用程序计费 Activity 。它工作正常。但为了使购买按钮不可见。我使用了以下代码,但它不起作用。有人可以帮忙吗?

 public class MainActivity extends BlundellActivity implements MainMenu {

public Button topicsbutton;
public Button mediabutton;
public Button purchasetopicsbutton;
public Button purchasemediabutton;



@SuppressWarnings("null")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    IInAppBillingService mService = null;


        Bundle ownedItems = null;
        try {
            ownedItems = mService.getPurchases(3, getPackageName(), "inapp", null);
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    int response = ownedItems.getInt("RESPONSE_CODE");
    if (response == 0) {
       ArrayList<?> ownedSkus = 
          ownedItems.getStringArrayList("INAPP_PURCHASE_ITEM_LIST");
     ArrayList<?> purchaseDataList = 
         ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST");


       for (int i = 0; i < purchaseDataList.size(); ++i) {

          Object sku = ownedSkus.get(i);

          if (sku == Items.SKU1) {
            purchasetopicsbutton.setVisibility(View.INVISIBLE);
              return;
          }

          else if (sku == Items.SKU2) {
                purchasemediabutton.setVisibility(View.INVISIBLE);
                return;
            }
       } 


    }


    setContentView(R.layout.activity_main);

    topicsbutton = (Button) findViewById(R.id.button1a);
    mediabutton = (Button) findViewById(R.id.button2a);
    purchasetopicsbutton = (Button) findViewById(R.id.button1);
    purchasemediabutton = (Button) findViewById(R.id.button2);
}

@Override
public void onTopicsPurchaseItemClick(View v) {
    navigate().toPurchaseTopicsActivityForResult();
}

@Override
public void onMediaPurchaseItemClick(View v) {
    navigate().toPurchaseMediaActivityForResult();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (Navigator.REQUEST_TOPICS_PURCHASE == requestCode) {
        if (RESULT_OK == resultCode) {
            dealWithSuccessfulTopicsPurchase();
        } else {
            dealWithFailedTopicsPurchase();
        }
    }

    else if (Navigator.REQUEST_MEDIA_PURCHASE == requestCode) {
        if (RESULT_OK == resultCode) {
            dealWithSuccessfulMediaPurchase();
        } else {
            dealWithFailedMediaPurchase();
        }
    }
}

public void dealWithSuccessfulTopicsPurchase() {
    Log.d("Topics purchased");
    popToast("Topics purchased");
    topicsbutton.setVisibility(View.VISIBLE);
    purchasetopicsbutton.setVisibility(View.INVISIBLE);

}

private void dealWithSuccessfulMediaPurchase() {
    Log.d("Media purchased");
    popToast("Media purchased");
    mediabutton.setVisibility(View.VISIBLE);
    purchasemediabutton.setVisibility(View.INVISIBLE);

}

private void dealWithFailedTopicsPurchase() {
    Log.d("Topics purchase failed");
    popToast("Failed to purchase Topics");
}

private void dealWithFailedMediaPurchase() {
    Log.d("Media purchase failed");
    popToast("Failed to purchase Media");
}

public void TopicsOpen(View v) {
    navigate().toTopicsopen();
}

public void MediaOpen(View v) {
    navigate().toMediaopen();
}

}

我在 logcat 中遇到错误

06-28 16:50:25.497: E/AndroidRuntime(10522): FATAL EXCEPTION: main
06-28 16:50:25.497: E/AndroidRuntime(10522): java.lang.RuntimeException: Unable to   start activity ComponentInfo{com.company.firstapp/com.company.firstapp.MainActivity}:   java.lang.NullPointerException
06-28 16:50:25.497: E/AndroidRuntime(10522):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at android.os.Looper.loop(Looper.java:137)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at android.app.ActivityThread.main(ActivityThread.java:5041)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at java.lang.reflect.Method.invokeNative(Native Method)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at java.lang.reflect.Method.invoke(Method.java:511)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at dalvik.system.NativeStart.main(Native Method)
06-28 16:50:25.497: E/AndroidRuntime(10522): Caused by: java.lang.NullPointerException
06-28 16:50:25.497: E/AndroidRuntime(10522):    at com.company.firstapp.MainActivity.onCreate(MainActivity.java:75)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at android.app.Activity.performCreate(Activity.java:5104)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-28 16:50:25.497: E/AndroidRuntime(10522):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-28 16:50:25.497: E/AndroidRuntime(10522):    ... 11 more

最佳答案

您将 mService 设置为 null,因此当您尝试使用它时,这将导致 NullPointerException(您从日志中看到的错误)。您需要先初始化它。

关于android - 如何在应用内计费应用程序android中调用getpurchase方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17375280/

相关文章:

android - 由于 android 不活动,15 分钟后自动注销

android - 处理公共(public)区域的多个地理围栏过渡

android - 滚动时如何扩展 RecyclerView Item 之间的空间

xcode - 恢复应用内购买失败

android.test.purchased 项目的 Android 应用内结算错误

android - 永久隐藏 Android 状态栏

python - 在 Python 中验证 Windows 8 应用内购买收据签名

ios - 无法使用 delphi firemonkey iOS 应用程序在应用程序购买中进行测试

带订阅的 Android 应用内计费

android - 应用内结算 : Which public and private keys are used for the in-app billing verification?