Ahmad Irfan
Ahmad Irfan

Reputation: 21

AdMob ads takes time to load in android application

I have been stuck for hours . I have integrated admob ads on my application and I add it when user write something in edit text but it takes time to load ads some times it comes while some times skip .So user type the text and move to the next activity and my ads not load in time . Can you give me some solution how to solve this issue !

thanks in advance

PassValues.java

package com.logixcess.wordguessing;

import android.content.Context;
import android.media.MediaPlayer;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Button;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;

import java.security.PrivateKey;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * Created by ert on 17/04/2016.
 */
public class Passvalues {
    public static String[] words , toCompare;
    public static int score = 0,staticScore = 0,prevScore = 0,correctCount = 0;
    public static String selectedWord;
    public static List<String> repeated = null;
    public static List<Button> buttonList = new ArrayList<Button>();
    public static int[] hiscore = new int[5];
    public static String[] hiscorename = new String[5];
    public static MediaPlayer mediaPlayer;//sounds
    public static MediaPlayer tones;//music
    static float volLeft = 70,volRight = 70;
    public static boolean sound = true,music=true;
    public static boolean adCheck = false;
    public static InterstitialAd interstitial;
    public Passvalues()
    {

        words=null ; toCompare=null;
        score = 0;prevScore = 0;correctCount = 0;
        selectedWord="";
        repeated = null;
        buttonList = new ArrayList<Button>();
        hiscore = new int[5];
        hiscorename = new String[5];
        adCheck = false;

    }

    public static void playMusic(Context context,int id)
    {
        if(Passvalues.music)
        {
            if(tones != null)
            {
                if (!tones.isPlaying()) {
                    tones = MediaPlayer.create(context, id);
                    tones.setLooping(true);
                    tones.start();
                }
            }
            else {

                tones = MediaPlayer.create(context, id);
                tones.setLooping(true);
                tones.start();
            }

        }
    }
    public static void stopMusic(){
       /* if(!Passvalues.sound) {
            if(tones != null)
            {
                if(tones.isPlaying()) {
                    stopPlaying(tones);
                }
            }
            else
            {
                tones = null;
                stopPlaying(tones);
            }
        }*/

        if((!Passvalues.music)&&(!Passvalues.sound))
        {
            if(tones!=null)
            {
                stopPlaying(tones);
                tones=null;
            }
            else
            {
                //pehlay se hi band hai music
            }
            if(mediaPlayer!=null)
            {

                stopPlaying(mediaPlayer);
                mediaPlayer=null;
            }
            else
            {

                //peh;ay se hi sound band hai
            }

        }
    }
    public static void playSound(Context context,int id){
        if(Passvalues.sound)
        {
            mediaPlayer = MediaPlayer.create(context, id);
            mediaPlayer.start();
        }
        else if(mediaPlayer != null)
        {
            if(mediaPlayer.isPlaying()) {
                stopPlaying(mediaPlayer);

            }
            if(mediaPlayer != null)
                stopPlaying(mediaPlayer);
        }

    }

    public static void stopPlaying(MediaPlayer mp)
    {

        if(mp!=null)
        {
            mp.stop();
            mp.release();
            mp=null;

        }

    }

    public static boolean showad(Context context)
    {
        if(isNetworkAvailable(context))
        {
            if(interstitial == null)
                interstitial = new InterstitialAd(context);
            interstitial.setAdUnitId("ca-app-pub-7328520387956873/2174089947");
            AdRequest adRequest = new AdRequest.Builder()
                    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                    .build();
            interstitial.loadAd(adRequest);
            return true;

        }
        return false;
    }


    private static boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();


        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

}

EnterHighScore.java this is the activity for ads

package com.logixcess.wordguessing;

import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import com.logixcess.wordguessing.R;

import android.app.Activity;
import android.app.DialogFragment;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.PowerManager.WakeLock;
import android.preference.PreferenceManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.Button;
import android.widget.EditText;
import com.google.android.gms.ads.AdListener;

public class EnterHiscore extends Activity {

    int score;
    EditText namebox;

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {

        onBackPressed();
        super.onKeyDown(keyCode, event);
        return true;
    }


    @Override
    public void onBackPressed() {
        Intent setIntent = new Intent(EnterHiscore.this,MainScreen.class);
        //setIntent.addCategory(Intent.CATEGORY_HOME);
        //setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(setIntent);
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //set screen full screen and no title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        setContentView(R.layout.enterhiscore);
        Passvalues.showad(EnterHiscore.this);
        View backgroundImage = findViewById(R.id.bak);
        Drawable background = backgroundImage.getBackground();
        background.setAlpha(90);
        //get score

        score = Passvalues.staticScore; //getIntent().getIntExtra("score", 0);

        //declare views
        namebox = (EditText) findViewById(R.id.namebox);
        Button save = (Button) findViewById(R.id.save);



    namebox.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (!Passvalues.adCheck) {
                Passvalues.interstitial.setAdListener(new AdListener() {
                    @Override
                    public void onAdLoaded() {
                        super.onAdLoaded();
                        if (Passvalues.interstitial.isLoaded()) {
                            Passvalues.interstitial.show();
                        }
                    }

                    @Override
                    public void onAdClosed() {
                        //finish();
                        Passvalues.interstitial = null;
                    }
                });
                Passvalues.adCheck = true;
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
        save.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                process_highscore(score, namebox.getText().toString());

            }
        });

    }






    public void loadscore() {
        // load preferences
        SharedPreferences hiscores = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        for (int i = 0; i < 5; i++) {
            Passvalues.hiscore[i] = hiscores.getInt("score" + i, 0);
            Passvalues.hiscorename[i] = hiscores.getString("name" + i, "---");
        }

    }

    public void savescore() {
        //load preferences
        SharedPreferences hiscores = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        SharedPreferences.Editor hiscores_editor = hiscores.edit();
        for (int i = 0; i < 5; i++) {
            hiscores_editor.putInt("score" + i, Passvalues.hiscore[i]);
            hiscores_editor.putString("name" + i, Passvalues.hiscorename[i]);
        }
        hiscores_editor.commit();
        loadscore();
    }

    public void process_highscore(int score, String name){
        System.out.println("ll"+score + name);
        loadscore();
        boolean ready = false;
        if (score > Passvalues.hiscore[0]) {

            Passvalues.hiscore[4] = Passvalues.hiscore[3];
            Passvalues.hiscorename[4] = Passvalues.hiscorename[3];
            Passvalues.hiscore[3] = Passvalues.hiscore[2];
            Passvalues.hiscorename[3] = Passvalues.hiscorename[2];
            Passvalues.hiscore[2] = Passvalues.hiscore[1];
            Passvalues.hiscorename[2] = Passvalues.hiscorename[1];
            Passvalues.hiscore[1] = Passvalues.hiscore[0];
            Passvalues.hiscorename[1] = Passvalues.hiscorename[0];


            Passvalues.hiscore[0] = score;
            Passvalues.hiscorename[0] = name;
            ready = true;
        }

        if (score > Passvalues.hiscore[1] && score <= Passvalues.hiscore[0] && !ready) {

            Passvalues.hiscore[4] = Passvalues.hiscore[3];
            Passvalues.hiscorename[4] = Passvalues.hiscorename[3];
            Passvalues.hiscore[3] = Passvalues.hiscore[2];
            Passvalues.hiscorename[3] = Passvalues.hiscorename[2];
            Passvalues.hiscore[2] = Passvalues.hiscore[1];
            Passvalues.hiscorename[2] = Passvalues.hiscorename[1];

            Passvalues.hiscore[1] = score;
            Passvalues.hiscorename[1] = name;
            ready = true;
        }
        if (score > Passvalues.hiscore[2] && score <= Passvalues.hiscore[1] && !ready) {

            Passvalues.hiscore[4] = Passvalues.hiscore[3];
            Passvalues.hiscorename[4] = Passvalues.hiscorename[3];
            Passvalues.hiscore[3] = Passvalues.hiscore[2];
            Passvalues.hiscorename[3] = Passvalues.hiscorename[2];

            Passvalues.hiscore[2] = score;
            Passvalues.hiscorename[2] = name;
            ready = true;
        }

        if (score > Passvalues.hiscore[4] && score <= Passvalues.hiscore[3] && !ready) {

            Passvalues.hiscore[4] = score;
            Passvalues.hiscorename[4] = name;
        }

        savescore();
        Intent i=new Intent(EnterHiscore.this,Highscore.class);
        startActivity(i);
        //go back to hiscores
        finish();
    }






}

Upvotes: 0

Views: 683

Answers (1)

Nana Ghartey
Nana Ghartey

Reputation: 7927

Instead of displaying the ad in the #onAdLoaded() callback, display it in the natural break point in #onTextChanged():

@Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (!Passvalues.adCheck) {
               if (Passvalues.interstitial.isLoaded()) {
                   Passvalues.interstitial.show();
                 }
                Passvalues.interstitial.setAdListener(new AdListener() {
                    @Override
                    public void onAdLoaded() {
                        super.onAdLoaded();
                    }

                    @Override
                    public void onAdClosed() {
                        //finish();
                        Passvalues.interstitial = null;
                    }
                });
                Passvalues.adCheck = true;
            }
        }

Upvotes: 0

Related Questions