hi, I work on android studio and I've tried to add ads to a basic processing code application. But, I haven't succeeded with that. How can I show an Interstitial ad in processing class which is a fragment in the main activity? Here's my code that I'm working on:
package com.example.processingexample;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import processing.core.PApplet;
import android.app.Activity;
import android.content.Context;
import android.os.Vibrator;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
public class Sketch extends PApplet {
public float a=100, b=100;
public float n=2;
Activity act;
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
boolean adLoaded=false;
InterstitialAd mInterstitialAd;
public void settings() {fullScreen(); }
public void setup() {
act=getActivity();
sharedPreferences=PreferenceManager.getDefaultSharedPreferences(act.getApplicationContext());
editor=sharedPreferences.edit();
mInterstitialAd=newInterstitialAd();
loadInterstitial();
n=sharedPreferences.getFloat("n", 2);
}
public void draw() {
background(51);
translate(width/2,height/2);
noFill();
stroke(255);
beginShape();
for(float angle=0; angle<TWO_PI; angle+=0.1) {
float na=2/n;
float x=5*pow(abs(cos(angle)),na)*a*sgn(cos(angle));
float y=5*pow(abs(sin(angle)),na)*a*sgn(sin(angle));
vertex(x,y);
}
endShape(CLOSE);
if (mousePressed) {
Vibrator viber=(Vibrator) act.getSystemService(Context.VIBRATOR_SERVICE);
viber.vibrate(100);
editor.putFloat("n", n).commit();
if (mouseX>0) {
n = map(mouseX, 0, width, PI / 50, 5);
} if (mouseX<width/5) {
println("loading");
}
}
if (adLoaded) {
showInterstitial();
}
}
public void mousePressed() {
}
public float sgn(float a){
if(a>0)
return 1;
else if(a<0)
return -1;
else
return 0;
}
private InterstitialAd newInterstitialAd() {
InterstitialAd interstitialAd = new InterstitialAd(act.getApplicationContext());
interstitialAd.setAdUnitId(getString(R.string.interstitial_ad_unit_id));
interstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
adLoaded=true;
}
@Override
public void onAdFailedToLoad(int errorCode) {
adLoaded=true;
}
@Override
public void onAdClosed() {
adLoaded=false;
mInterstitialAd = newInterstitialAd();
loadInterstitial();
}
});
return interstitialAd;
}
private void showInterstitial() {
// Show the ad if it's ready. Otherwise toast and reload the ad.
if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
private void loadInterstitial() {
// Disable the next level button and load the ad
AdRequest adRequest = new AdRequest.Builder()
.setRequestAgent("android_studio:ad_template").build();
// System.out.println(adRequest);
if (mInterstitialAd!=null && adRequest!=null)
mInterstitialAd.loadAd(adRequest);
}
}
When I run the application on my phone, it crashes and give me lot of errors:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at com.google.android.gms.ads.internal.prefetch.b.<init>(:com.google.android.gms.DynamiteModulesA:37)
at com.google.android.gms.ads.internal.prefetch.b.<init>(:com.google.android.gms.DynamiteModulesA:31)
at com.google.android.gms.ads.internal.c.<init>(:com.google.android.gms.DynamiteModulesA:106)
at com.google.android.gms.ads.internal.c.<init>(:com.google.android.gms.DynamiteModulesA:92)
at com.google.android.gms.ads.internal.g.<init>(:com.google.android.gms.DynamiteModulesA:55)
at com.google.android.gms.ads.internal.ad.<init>(:com.google.android.gms.DynamiteModulesA:132)
at com.google.android.gms.ads.ChimeraAdManagerCreatorImpl.newAdManagerByType(:com.google.android.gms.DynamiteModulesA:77)
at com.google.android.gms.ads.internal.client.al.onTransact(:com.google.android.gms.DynamiteModulesA:91)
at android.os.Binder.transact(Binder.java:387)
at com.google.android.gms.ads.internal.client.am.newAdManagerByType(:com.google.android.gms:170)
at com.google.android.gms.ads.AdManagerCreatorImpl.newAdManagerByType(:com.google.android.gms:90)
at com.google.android.gms.ads.internal.client.al.onTransact(:com.google.android.gms:91)
at android.os.Binder.transact(Binder.java:387)
at com.google.android.gms.ads.internal.client.zzv$zza$zza.zza(Unknown Source)
at com.google.android.gms.ads.internal.client.zze.zza(Unknown Source)
at com.google.android.gms.ads.internal.client.zzl$3.zzim(Unknown Source)
at com.google.android.gms.ads.internal.client.zzl$3.zzin(Unknown Source)
at com.google.android.gms.ads.internal.client.zzl.zza(Unknown Source)
at com.google.android.gms.ads.internal.client.zzl.zzb(Unknown Source)
at com.google.android.gms.ads.internal.client.zzaf.zzam(Unknown Source)
at com.google.android.gms.ads.internal.client.zzaf.zza(Unknown Source)
at com.google.android.gms.ads.InterstitialAd.loadAd(Unknown Source)
at com.example.processingexample.Sketch.loadInterstitial(Sketch.java:119)
at com.example.processingexample.Sketch.setup(Sketch.java:31)
at processing.core.PApplet.handleDraw(PApplet.java:2122)
at processing.core.PGraphicsAndroid2D.requestDraw(PGraphicsAndroid2D.java:172)
at processing.core.PApplet.run(PApplet.java:2013)
at java.lang.Thread.run(Thread.java:818)