Невозможно правильно реализовать метод onActivityResult для выставления счетов в приложении в Android

Прежде всего, я использовал идею из http://www.tutorialsface.com/2016/05/implementing-remove-ads-in-app-purchases-in-android-tutorial-example/ с отдельным классом для обработки счетов InApp .

В моем классе, с которого я запускаю биллинг, уже был метод 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.

Поэтому я решил поместить метод StartBilling в результат действия.

Но даже если я сначала получаю диалоговое окно электронной почты, я получаю нулевое значение в mHelper, поэтому дальше ничего не происходит. Как это исправить?

Мне сделать следующее?:

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

person Community    schedule 06.08.2016    source источник
comment
Возможно, не связано: вы пропустили вызов super.onActivityResult в начале.   -  person Eugen Pechanec    schedule 08.08.2016
comment
Зачем мне нужен super.onActivityResult в начале?   -  person    schedule 10.08.2016
comment
Без него onActivityResult во фрагментах работать не будет. Если вы хотите сказать, что у меня нет никаких фрагментов, однажды вы это сделаете и удивитесь, почему они не работают.   -  person Eugen Pechanec    schedule 10.08.2016


Ответы (1)


Ссылка на нулевой объект возникла из-за того, что метод mHelper onCreate моего второго действия не инициализирован, поэтому я сделал

mHelper = startBilling.mHelper; 
person Community    schedule 08.08.2016