【发布时间】:2016-09-08 16:06:38
【问题描述】:
我正在尝试为高级会员设置 iAP。 我已将我的应用程序和签名的 apk 添加到开发者控制台,然后我开始遵循这个示例:Implementing In-app Billing
我注意到一个棘手的部分:
警告:不要在主线程上调用 getSkuDetails 方法。调用此方法会触发可能阻塞主线程的网络请求。相反,创建一个单独的线程并从该线程内部调用 getSkuDetails 方法。
这是我写的代码:
public class class...
Bundle querySkus = new Bundle();
/** gestisce gli acquisti in app */
IInAppBillingService mService;
ServiceConnection mServiceConn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IInAppBillingService.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
};
在我的onCreate() 方法中:
Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
ArrayList<String> skuList = new ArrayList<String>();
skuList.add("premiumUpgrade");
querySkus.putStringArrayList("chords_premium", skuList);
AsyncTask.execute(new Runnable() {
@Override
public void run() {
Bundle skuDetails = mService.getSkuDetails(3, getPackageName(), "inapp", querySkus);
}
});
现在Bundle skuDetails = mService.getSkuDetails(3, getPackageName(), "inapp", querySkus); 我收到了:
未处理的异常:android.os.RemoteException
首先,我该如何解决?
我正在我的主要活动中实现此代码,即使应该重定向到购买对话框的按钮位于另一个活动中。 我做得对吗?我需要将它传递给其他活动吗?如果是这样,怎么做?将处理 iAP 的整个代码放在特定活动中会更好吗?
**编辑:** 我试图捕捉这样的异常:
AsyncTask.execute(new Runnable() {
@Override
public void run() {
try {Bundle skuDetails = mService.getSkuDetails(3, getPackageName(), "inapp", querySkus); }
catch (RemoteException e) {e.printStackTrace();};
}
});
它不起作用,因为我无法设置 int response = skuDetails...(在上面链接的文档中)
【问题讨论】:
-
是编译错误还是运行时错误?
-
编译错误
标签: java android multithreading in-app-purchase