我正在使用共享的首选项保存用户的项目点击,然后在2次点击后显示admob广告,一切正常,但是我的问题是,当我单击项目2-3次时,该值保存到共享的偏好设置中但该广告没有展示,我必须退出我的应用,然后该广告才展示。
我已经在google上搜索了stackoverflow,但没有任何帮助。
P.s。单击该项目将启动另一个活动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
rvWord = findViewById(R.id.recyclerview);
rvWord.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
mDBHelper = new DatabaseHelper(this);
mAdView = findViewById(R.id.adView);
dictionaryAdapter = new DictionaryAdapter(this);
dictionaryAdapter.setCursor(mDBHelper.getDictionaryWord(""));
rvWord.setAdapter(dictionaryAdapter);
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
mInterstitialAd.loadAd(new AdRequest.Builder().build());
preferences = getSharedPreferences("click_count",MODE_PRIVATE);
if ( preferences.getInt("count", 0) > 2) {
mInterstitialAd.setAdListener(new AdListener() {
public void onAdLoaded() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
});
editor = preferences.edit();
editor.clear();
editor.apply();
}
// Show Notification Daily
showTimedNotification(this);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
答案 0 :(得分:1)
问题可能是广告没有加载显示。根据{{3}},您必须在onCreate方法中加载广告。
将以下几行移至onCreate方法
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
mInterstitialAd.loadAd(new AdRequest.Builder().build());
并在插页式广告关闭时加载新广告,以便下次单击按钮时可以显示此已加载的广告。使用以下代码更新AdListener。如果需要在返回时检查首选项值,则必须在onStart方法中使用它,因为onCreate方法仅在应用程序重新启动时才被调用。阅读此docs可以了解android活动的生命周期
@Override
protected void onStart() {
super.onStart();
if ( preferences.getInt("count", 0) > 2) {
mInterstitialAd.setAdListener(new AdListener() {
public void onAdLoaded() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
@Override
public void onAdClosed() {
// Load the next interstitial.
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
});
editor = preferences.edit();
editor.clear();
editor.apply();
}
}
答案 1 :(得分:0)
我有同样的问题,但是当我使用commit()而不是apply()时。可能会很好。
因为apply()是异步的,所以它提交时没有返回表示成功或失败的布尔值。
和commit()是同步的,如果保存有效,则返回true,否则返回false。