bri*_*gsm 5 android device-orientation illegalstateexception in-app-billing
我根据Android的实施应用内结算指南实施了应用内结算(v3).
一切正常,直到我旋转设备,然后立即将其旋转回原来的方向.实际上,有时它会起作用,有时会崩溃:
java.lang.IllegalStateException: IabHelper was disposed of, so it cannot be used.
似乎这与IAB的异步性质有关,尽管我并不积极.
有什么想法吗?
您可能正在获取异常,因为您调用了活动生命周期中的某个位置mHelper.dispose(),然后尝试使用相同的已处置实例.我的建议是只处理mHelper onDestroy()并重新创建它onCreate().
但是,您将遇到IabHelper和设备旋转的另一个问题.问题是这样的:在你的活动中onCreate(),你创建了IabHelper实例mHelper并进行设置.稍后,您调用mHelper.launchPurchaseFlow(...)并在您的活动上方浮动IAB弹出对话框.然后旋转设备,IabHelper实例将被丢弃,onDestroy(...)然后重新创建onCreate(...).IAB对话框仍然显示,您按下购买按钮,购买完成.onActivityResult()然后在你的活动上打电话,你自然会打电话mHelper.handleActivityResult(...).问题是,launchPurchaseFlow(...)从未在重新创建的IabHelper实例上调用过.IabHelper只能处理活动的结果handleActivityResult(...),如果launchPurchaseFlow(...)先前已呼吁当前实例.永远不会调用您的OnIabPurchaseFinishedListener.
我的解决方案是修改IabHelper以允许您在handleActivityResult(...)没有调用的情况下告诉它launchPurchaseFlow(...).我在IabHelper.java中添加了以下内容
public void expectPurchaseFinished(int requestCode, OnIabPurchaseFinishedListener listener)
{
mRequestCode = requestCode;
mPurchaseListener = listener;
}
Run Code Online (Sandbox Code Playgroud)
这将导致IabHelper在调用onIabPurchaseFinished(...)时调用侦听handleActivityResult(...)器.然后,你这样做:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
mHelper.expectPurchaseFinished(requestCode, mPurchaseFinishedListener);
mHelper.handleActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)
我的整个IabHelper副本可以在这里找到https://gist.github.com/benhirashima/7917645.请注意,我使用此提交中找到的版本更新了我的IabHelper副本,该版本修复了一些错误,但尚未在Android SDK Manager中发布.另请注意,有更新的提交,但它们包含新的错误,不应使用.
| 归档时间: |
|
| 查看次数: |
1239 次 |
| 最近记录: |