0

まず、アプリ内課金を処理するための別のクラスを持つhttp://www.tutorialsface.com/2016/05/implementing-remove-ads-in-app-purchases-in-android-tutorial-example/のアイデアを使用しました.

請求を開始するクラスには、すでに onActivityResult メソッドがあり、それを次のように変更しました。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{

    if (mHelper == null) return;


    if (!mHelper.handleActivityResult(requestCode, resultCode, data))
    {

        if(requestCode==3)
        {
            // Construct the data source
            ArrayList<Service> arrayOfServices = new ArrayList<Service>();
            arrayOfServices = db.getAllServices();
            // Create the adapter to convert the array to views
            CatalogueAdapter adapter = new CatalogueAdapter(this, arrayOfServices);
            // Attach the adapter to a ListView
            myServices.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }

        if (requestCode == 1111 && resultCode == RESULT_OK)
        {
            String emailAddress = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);

            Calendar c = Calendar.getInstance();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH:mm");
            String formattedDate = df.format(c.getTime());
            possibleEmail=md5(emailAddress + formattedDate);

            startBilling.purchaseRemoveAds(possibleEmail);

        }

    }else 
       {
        //Log.d(TAG, "onActivityResult handled by IABUtil.");
       }

}

まず、メインの Google アカウントを取得し、現在の日付とともに暗号化してから、課金プロセスを開始します。しかし、メールを受け取るダイアログの前に、InApp Billing のダイアログがあります。

そこで、Activity Result 内に StartBilling のメソッドを配置することを考えました。

しかし、最初にメール ダイアログを取得しても、mHelper で null を取得するため、次に何も起こりません。これを修正するには?

次のことをしましょうか?:

@Override
protected void onResume() {
    super.onResume();
    if(possibleEmail!=null)
    {
        startBilling.purchaseRemoveAds(possibleEmail);
    }
}
4

1 に答える 1

0

Null オブジェクト参照は、2 番目のアクティビティの mHelper onCreate メソッドを初期化していないために発生したため、初期化しました

mHelper = startBilling.mHelper; 
于 2016-08-08T06:54:33.880 に答える