2016-09-16 3 views
1

Okay, wie schreiben Sie Code, wenn Sie das gleiche noch einmal brauchen? Wie in meinem Fall habe ich eine Fullscreen-Anzeige wie unten Code implementiert und ich brauche das gleiche in einer anderen Aktivität, wenn Sie die Taste drücken, aber ich möchte nicht den gesamten Code schreiben, ich möchte von vorherigen Aktivität aufrufen. ich versucht habe, istWie Methode oder ein Teil des Codes von einer Klasse zu einer anderen aufrufen?

Cover cc=new Cover(); 
cc.showIndustrial(); 

aber es thow mir eine Null-Zeiger-Ausnahme. Ich möchte eine neue Klasse für Industrial Ad erstellen und den vollständigen Code dort schreiben und von einer anderen Klasse anrufen, wenn ich brauche. Wie machen wir das einfach?

Ich habe Interstitial Anzeige auf Aktivität wie dieses

public class Cover extends AppCompatActivity{ 
public static String DEFAULT = "en"; 
InterstitialAd mInterstitialAd; 
AdRequest adRequest; 
@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mInterstitialAd = new InterstitialAd(this); 
    mInterstitialAd.setAdUnitId("ca-app-pub-xxx-xxx-xxx"); 
    adRequest = new AdRequest.Builder().addTestDevice("0F7B337499FCAAA05252B09EFC57223C").build(); 
    mInterstitialAd.loadAd(adRequest); 
    mInterstitialAd.setAdListener(new AdListener() { 
     public void onAdLoaded() { 
      showInterstitial(); 
     } 
    }); 

} 

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

geschätzt Jede Hilfe wäre setzen !! ;)

+0

Sie können Ihre Aktivität nicht instanziieren. – Piyush

Antwort

1

eine neue Hilfsklasse Klasse erstellen:

public class AdsHelper { 

static InterstitialAd mInterstitialAd; 
static AdRequest adRequest; 

public static void showAd(Activity activity) { 
    mInterstitialAd = new InterstitialAd(activity); 
    mInterstitialAd.setAdUnitId("ca-app-pub-xxx-xxx-xxx"); 
    adRequest = new AdRequest.Builder().addTestDevice("0F7B337499FCAAA05252B09EFC57223C").build(); 
    mInterstitialAd.loadAd(adRequest); 
    mInterstitialAd.setAdListener(new AdListener() { 
     public void onAdLoaded() { 
      showInterstitial(); 
     } 
    }); 

} 

public static void showInterstitial() { 
    if (mInterstitialAd.isLoaded()) { 
     mInterstitialAd.show(); 
    } 
} 

und verwenden Sie es in Ihrem 2 Aktivitäten:

public class Cover extends AppCompatActivity{ 
@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    AdHelper.showAd(this); // this will show the ad 
} 
+1

Ich hoffe, das wird für mich funktionieren, aber ich bin ein wenig verwirrt! AdsHelper ist eine neue Klasse oder Sie erstellen in derselben Aktivität? öffentliche Klasse AdsHelper() ?? Seltsam .. Ich bekomme Fehler? Brauchen wir keine onCreate-Methode? und erweitert AppCompactActivity? Bitte bearbeiten Sie Ihre Antwort, um mich klar zu machen .. –

+0

Das Problem ist, ich muss eine Variable statisch machen !! Danke –

0

Generische Funktion in jeder gebräuchlichen Klasse machen und bei Bedarf einen Aufruf zur Funktion machen, um es öffentlich zu machen und Parameter entsprechend den Bedingungen zu übergeben. Dann nenne es in jeder Klasse irgendwo im ganzen Projekt.

+0

Ich bin neu bei Android, ich kann das nicht verstehen, können Sie mir ein Beispiel geben? Wie Klasse A {} –

+0

Ja sicher, in jeder geläufigen Klasse eine öffentliche statische Funktion wie unten zu machen. Ich gebe Ihnen nur Beispiel public static void showAd (Kontext Kontext) { // Schreiben Sie Ihren Code, um Anzeigen zu zeigen, wenn nötig, übergeben andere Parameter in Funktion } Wohin in Projekt Sie verwenden möchten, rufen Sie es mit Hilfe von Klassennamen. Wenn Sie diese Funktion in einer beliebigen Util-Klasse behalten, dann rufen Sie sie als Util.showAd(); Pass Parameter in es und es funktioniert überall im Projekt. –

0

Dieses:

Cover cc=new Cover(); 

gebunden ist, dich in den Arsch eine oder andere Weise zu beißen. Das ist kein geeigneter Weg, um die Aktivität zu instanziieren.

Was ich vorschlagen würde, ist eine Klasse BaseActivity genannt zu haben, die AppCompatActivity erstreckt und eine öffentliche Methode namens showAd und dann alle anderen Aktivitäten BaseActivity erstreckt haben. Auf diese Weise können Sie einfach super.showAd() an jeder Stelle aufrufen, an der die Anzeige angezeigt werden soll, ohne dass dieselbe Methode an mehreren Stellen erneut deklariert werden muss.

+0

lass mich es versuchen !! –

0

Sie benötigen eine neue Instanz für eine andere Aktivität zu erstellen und später die expecific Methode aufrufen Verwenden der neuen Instanz, aber ... es ist eine so schlechte Option.

Abstrakt Code eine neue Klasse, zum Beispiel zu erstellen:

Ihre Aktivität

public class MyActivity extends AppCompatActivity{ 

    //...............another irrelevant code 

    Cover mMyCoverClass = new Cover(MyActivity.this) 
    mMyCoverClass.MyMethod(); 

} 

Ihre öffentlichen Abdeckung Klasse

public final class Cover 
{ 

    private static Context context; 

    public Cover(Context context) 
    { 
     this.context = context; 
    } 

    public void MyMethod() 
    { 
     //.........do something or retrieve something 
    } 

}//end CoverClass 
0

dieser Code eine Klasse Anruf Ausprobieren IndustryDetails schreiben Sie eine Methode in sie (mit Parameter, wenn Sie möchten).

public static void getInsustryDetails() { 

    //Your code to show the details of the industry. 
} 

Rufen Sie diese Methode, wenn Sie die Industrie Details anzeigen möchten. z. IndustryDetails.getIndustryDetails();

von einer beliebigen Aktivität.

+0

Ich kann die Methode nicht statisch machen, da dieses Schlüsselwort existiert mInterstitialAd = new InterstitialAd (this); –

+0

@AppleAppala Ich kann dich nicht bekommen.Was willst du genau? –

+0

Problem ist, wenn ich eine öffentliche statische void getInistryDetails() -Funktion machen und den Anzeigencode einfügen, dann gibt es mir einen Fehler bei "diesem" Schlüsselwort zurück, d. H. MInterstitialAd = new InterstitialAd (this); und wenn ich Alt + Enter bei "diesem" Schlüsselwort dann gebe es mir einen Hinweis wie "Make getInistryDetails" nicht statisch !! Daher kann ich keine statische Funktion ausführen. –

0

Versuchen Sie, den Anzeigencode in einem anderen Verfahren (dh getAdd) zu setzen, und dann unten Code schreiben, in dem Sie diese Methode aufrufen wollen:

((Core) getApplicationContext).getAdd(); 

Was Sie hier tun, ist, dass Sie ein Objekt erstellen, der Cover-Klasse. Wenn Sie nun ein Objekt einer Klasse erstellen (z. B. Cover cc = new Cover), wird das Objekt cc jedesmal null sein, weil Sie ein neues erstellen. Das ist der Grund, warum Sie NullPointerException erhalten. Versuchen Sie daher, die Methode aufzurufen, ohne ein neues Objekt zu erstellen.

Verwandte Themen