2017-04-05 5 views
0

Ich verwende InterstitialAd von Admob. Meine App stürzt bei "loadAd" nur beim ersten Aufruf ab und ist nicht reproduzierbar (es passiert einmal in 100-200 Läufen weniger oder mehr). Die Anzeigenblock-ID ist korrekt. Wenn also loadAd beim ersten Aufruf nicht fehlschlägt, wird es bei diesem Lauf überhaupt nicht fehlschlagen.Android: Admob InterstitialAd Absturz bei LoadAd

Klasse Mitglied:

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 Methode:

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; 
     } 
    } 
} 

Der Fang nicht den Absturz von "lastet" fangen.

Wie kann ich es fangen oder zumindest dazu führen, dass es nicht zum Absturz meiner App kommt? Ich wünsche mir, dass, wenn loadAd fehlschlägt, keine Werbung angezeigt wird.

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 

Ich weiß nicht, ob die letzten 2 Zeilen über diesen Absturz sind aber die erste ist sicher.

+1

Dies ist ein Fehler in einer nativen C-Bibliothek. Auf welchem ​​Gerät testen Sie? – William

Antwort

0

Manchmal, was geschehen ist Ad tut in Ihrem Puffer erhalten geladen, so, wenn Sie versuchen, lasteten zu nennen, stürzt es 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(); 
     } 
    }); 

In der gleichen Klasse:

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

ok so was ist die Lösung? Ich bin mir sicher, dass der Absturz an der Zeile "loadAd" liegt, weil ich vor jeder Zeile nur eine Zahl ausgedruckt habe und wenn der Absturz passiert, wird die Nummer nach der Zeile "loadAd" nie gedruckt. –

+0

Versuchen Sie, die Schritte zu befolgen, wie ich oben gezeigt habe, fügen Sie den setAdListener hinzu. Es sollte funktionieren. Auch ich bin nicht vertraut mit dem Fehler, der in Ihrem Logcat ist, kann es Problem sein, dass ich erwähnte, also versuchen Sie es einmal zu tun. –

+0

ohh ich habe es! Ich werde es hunderte Male versuchen und ich werde es euch wissen lassen. Vielen Dank! –

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

Kannst du bitte erklären, was ist der Unterschied zu der Firebase? außer der statischen Einstellung .. –