我的所有In App Billing代码在我的MainActivity上运行良好。 问题是我想从另一个活动访问该代码。
我想要触及的代码在我的主要活动中:
public void buyCode() {
Log.d(TAG, "2. Button pressed");
mHelper.launchPurchaseFlow(MainActivity.this, SKU_TEST, 10001,
mPurchaseFinishedListener, "abc123abc1234");
}
我已尝试在其他活动的OnClickListener上使用此代码,但它无效,结果为NullPointerException
MainActivity myMainActivity = new MainActivity();
myMainActivity.buyCode();
我该如何做到这一点?
由于
答案 0 :(得分:0)
您不能自己创建活动实例,并期望它表现为系统创建的活动。它不会起作用,因为系统处理所有生命周期事件,如创建,开始,停止,暂停等。
您需要为应用内付款设置专门的活动,或者您需要将mHelper
嵌入到每个活动中以执行购买(这不太可取)。
在第一种情况下,您的主要活动必须仅负责购买操作和处理结果。然后你可以通过Intent从任何其他活动中调用它。在第二种情况下,您在多个活动中实施相同的购买逻辑(这是个坏主意),您不再需要再调用主要活动。
如果在您的情况下,主要活动比处理应用内付款更多,那么您可以使用额外的标记来调用它,说用户想要购买某些东西。你可以这样做。
// calling activity
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("purchase", true);
startActivity(intent);
// MainActivity.java
@Override
public void onCreate(Bundle savedInstanceState) {
boolean executePurchase = getIntent().getBooleanExtra("purchase", false);
if (executePurchase) {
// start purchasing logic
...
} else {
// continue with the standard logic
...
}
}
但MainActivity
将在调用活动之前启动,您无法通过当前的设计来避免这种情况。