Как вызвать showAd () из другого действия - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь вызвать метод runTheAd (), который определен в MainActivity.kt из другого класса Activity RewardedAd.kt

Я просто следовал этому руководству Google Admob Doc

Функция в MainActivity.kt

fun runTheAd(){
        if (mRewardedVideoAd.isLoaded) {
            mRewardedVideoAd.show()
        }else{
            loadRewardedVideoAd()
        }
    }

Вызов RewardAd.kt

getPoints.setOnClickListener{
            MainActivity().runTheAd()
        }

Получение Эррона

   E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.takshaksh.layoutout, PID: 28485
        kotlin.UninitializedPropertyAccessException: lateinit property mRewardedVideoAd has not been initialized
            at com.takshaksh.layoutout.MainActivity.runTheAd(MainActivity.kt:56)
            at com.takshaksh.layoutout.RewardedAd$onCreate$1.onClick(RewardedAd.kt:20)

Ответы [ 3 ]

0 голосов
/ 14 июня 2019

, так как вы вызываете метод из другого действия, второе действие не может инициализировать mRewardedAd из MainActivity.Таким образом, вы можете поместить инициализацию в метод runTheAd, однако это не лучшая практика.

0 голосов
/ 14 июня 2019

вы просто не можете создать и сохранить такой экземпляр активности. вместо этого вы просто начинаете свое второе действие с

**startActivityForResult**(intent,101);

тогда в вашем первом занятии просто переопределите

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    // Check which request we're responding to
    if (requestCode == 101) {
        //here do start your ad when some condition is satisfied
    }
}

во втором упражнении, когда вы думаете или просто выполняется какое-то условие, просто назовите это

Intent intent = new Intent();
intent.putExtra("key", "I am done");
setResult(RESULT_OK, intent);

это вызовет onActivityResult в первом действии, если задание находится в заднем стеке. где вы можете написать свою логику, чтобы начать объявление

Второй вариант заключается в создании локальной трансляции и получении их, очень похожих на приведенные выше, снова используя намерения.

Третий вариант, который вы можете иметь, это Шина событий , которая также очень проста в реализации

здесь вы можете прочитать больше.

Действительно не получает setResult и onActivityResult

Как использовать LocalBroadcastManager?

https://github.com/greenrobot/EventBus

0 голосов
/ 14 июня 2019

Сначала вам нужно создать экземпляр. После этого вызова покажите метод.

 override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713")

    // Use an activity context to get the rewarded video instance.
    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this)
    mRewardedVideoAd.rewardedVideoAdListener = this
}

Также, насколько я помню, вам нужно настроить сторону adMob, чтобы активировать идентификатор вашей рекламы и некоторые манипуляции с манифестом. Так что где-то на этом этапе соединение не работает, поэтому экземпляр не создан, и в результате возникает ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...