2017-04-05 49 views
0

我使用AdMob的InterstitialAd。我的應用程序僅在第一次調用時發生「loadAd」崩潰,並且不可重現(一次發生在100-200次以內)。廣告單元ID肯定是正確的。因此,如果loadAd在第一次調用時沒有失敗,它在這次運行中根本不會失敗。android:admob InterstitialAd在loadAd時崩潰

類成員:

InterstitialAd mInterstitialAd; 

的onCreate:

mInterstitialAd = new InterstitialAd(this); 

mInterstitialAd.setAdUnitId(getResources().getString(R.string.interstitial_ad_unit_id)); 

mInterstitialAd.setAdListener(new AdListener() { 
    @Override 
    public void onAdClosed() { 
     requestNewInterstitial(); 
     finish(); 
    } 
}); 

requestNewInterstitial(); 

requestNewInterstitial方法:

private void requestNewInterstitial() { 
    if (mInterstitialAd != null) { 
     AdRequest adRequest = new AdRequest.Builder() 
       .addTestDevice(getResources().getString(R.string.test_device)) 
       .build(); 

     if (adRequest == null) { 
      return; 
     } 

     // HERE'S THE CRASH 
     try { 
      mInterstitialAd.loadAd(adRequest); 
     }catch(Exception e) { 
      return; 
     } 
    } 
} 

捕捉不捕獲 「loadAd」 的崩潰。

我該如何捕捉它,或至少導致它不會崩潰我的應用程序?我希望當loadAd失敗時,不會顯示任何廣告。

的logcat:

A/libc: Fatal signal 5 (SIGTRAP), code 1 in tid 27794 (AdWorker(Defaul) 
W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc 
I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es 

我不知道,如果最後兩行是這個崩潰,但第一個是肯定的。

+1

這是本機C庫中的錯誤。你正在測試什麼設備? – William

回答

0

有時發生什麼是廣告確實得到加載到您的緩衝區,所以當你嘗試調用loadAd,它崩潰 的onCreate:

mInterstitialAd = new InterstitialAd(this); 
    // set the ad unit ID 
    mInterstitialAd.setAdUnitId(getString(R.string.ad_id)); 

    AdRequest adRequest2 = new AdRequest.Builder() 
      .build(); 
    // Load ads into Interstitial Ads 

    mInterstitialAd.loadAd(adRequest2); 

    mInterstitialAd.setAdListener(new AdListener() { 
     public void onAdLoaded() { 
      showInterstitial(); 
     } 
    }); 

在同一個班級:

private void showInterstitial() { 
    if (mInterstitialAd.isLoaded()) { 
     mInterstitialAd.show(); 
    } 
} 
+0

好吧,那有什麼解決辦法?我確信崩潰是在「loadAd」這一行,因爲我在每行之前打印了一個數字,當崩潰發生時,「loadAd」行之後的數字從不打印。 –

+0

嘗試按照上面顯示的步驟操作,添加setAdListener。它應該工作。此外,我不熟悉Logcat中的錯誤,可能是我提到的問題,因此請嘗試一次。 –

+0

哦,我明白了!我會嘗試數百次,我會讓你知道。謝謝! –

0

Activtiy_m1的.java

public class Activity_m1 extends AppCompatActivity { 

    InterstitialAd interstitial; 
    Activity mactivity; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_m1); 
     setTitle("ABCD"); 
     Advertise.displaym1(getApplicationContext()); 
    } 

    @Override 
    public void onBackPressed() { 
      Advertise adv = new Advertise(); 
      adv.disp_adm1(); 
     finish(); 
    } 
} 

Advertise.java

public class Advertise { 
    public static InterstitialAd interstitial; 

    public static void displaym1(Context act) { 
     interstitial = new InterstitialAd(act); 
     interstitial.setAdUnitId("ca-app-pub-2621588945556564/3343556333"); 
     AdRequest adRequest1 = new AdRequest.Builder().build(); 
     interstitial.loadAd(adRequest1); 
    } 
    public void disp_adm1() { 
     if (interstitial.isLoaded()) 
      interstitial.show(); 
    } 
} 
+0

你能解釋一下這個與firebase顯示有什麼區別嗎?除靜態態度外 –