我是实施谷歌计费库的新手,并使用这个系统在我的应用程序内进行订阅。我正试图让 详单列表(skuDetailsList 这是由 onSkuDetailsResponse 并添加到ArrayList的数据源。我正在将ArrayList设置为适配器的数据源。问题是ListView每次都显示为空,即使ArrayList数据源中有项目可用。
我试着向数据源添加假值,发现它们被显示在列表视图控件中。因此,我调试了代码,发现视图首先被返回,然后项目被添加到ArrayList数据源,因为onSkuDetailsResponse被异步调用。
以下是用于建立连接、获取SKU详细信息、绑定数组列表和在 "OnCreateView "中设置适配器到ListView控件的全部代码。
建立连接的代码
private void startBillingServiceConnection(){
//Initialize a billing client
billingClient = BillingClient.newBuilder(this.getActivity())
.setListener(this)
.enablePendingPurchases()
.build();
//Establish a connection to Google Play
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// The BillingClient is ready. You can query purchases here....
querySkuDetails();
@Override
public void onBillingServiceDisconnected() {
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
查询SkDetails的代码
public void querySkuDetails() {
Log.i(TAG, "querySkuDetails");
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(LIST_OF_SKUS).setType(BillingClient.SkuType.SUBS);
billingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult,
List<SkuDetails> skuDetailsList) {
if (billingResult == null) {
return;
int responseCode = billingResult.getResponseCode();
String debugMessage = billingResult.getDebugMessage();
switch (responseCode) {
case BillingClient.BillingResponseCode.OK:
if (skuDetailsList != null && skuDetailsList.size() > 0) {
subscribeItemDisplay.clear();
for (SkuDetails p : skuDetailsList) {
subscribeItemDisplay.add("Product Name - "+p.getOriginalPrice()+": "+p.getSubscriptionPeriod()+": "+p.getFreeTrialPeriod());
default:
break;
"OnCreateView "中的代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainHandler = new Handler();
// Inflate layout
View view = inflater.inflate(R.layout.subscribe_fragment, container, false);
subscriptionsListView = view.findViewById(R.id.subscriptionsView);
loadInAppProductIDS();
return view;
loadInAppProductIDS的代码
public void loadInAppProductIDS() {
new Thread(new Runnable() {
@Override
public void run() {
LIST_OF_SKUS= Collections.unmodifiableList(myProductIDs);
startBillingServiceConnection();
mainHandler.post(new Runnable() {
public void run() {
arrayAdapter = new ArrayAdapter<String>(getActivity(), R.layout.subscription_items_list, subscribeItemDisplay);
subscriptionsListView.setAdapter(arrayAdapter);
}).start();
你能建议如何将项目添加到数据源,绑定到列表视图,然后返回视图吗?