Ошибка AdMob

Я видел много подобных тем на этом форуме, но ни одна из них не решила мою проблему. В моем коде у меня есть что-то вроде этого:

import com.google.android.gms.R;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

...

AdView adView = (AdView)this.findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice("TEST_DEVICE_ID")
.build();
adView.loadAd(adRequest);

И он показывает мне 2 ошибки (я выделил красные метки жирным шрифтом):

– В первой строке: "AdView adView = (AdView)this.findViewById(R.id.adView);" - adView не может быть разрешен или не является полем

-И в последней строке: "adView.loadAd(adRequest);" - Тип android.view.ViewGroup не может быть разрешен. На него косвенно ссылаются необходимые файлы .class.

Я понятия не имею, что вызывает это. Раньше у меня также была проблема с отсутствием папки «макет», но я сгенерировал ее с помощью файла макета eclipse new>other>android XML. Должен ли я также как-то связать его с помощью манифеста?

P.S. Это проект libGDX

РЕДАКТИРОВАТЬ: Вот мой файл layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    ads:adSize="BANNER"
    ads:adUnitId="@string/banner_ad_unit_id">

</com.google.android.gms.ads.AdView>


person urban07    schedule 20.06.2015    source источник
comment
Разместите файл макета, где вы размещаете рекламу   -  person Psypher    schedule 20.06.2015
comment
Вы импортировали сервисную библиотеку Google Play?   -  person Ravi    schedule 20.06.2015
comment
@Ravi Да, сервис Google Play импортирован в мой проект. Ранджит, я опубликую это здесь ^   -  person urban07    schedule 20.06.2015


Ответы (2)


твоя проблема с этой строкой

import com.google.android.gms.R;

удалите это и импортируйте файл .R пакета

import <package name>.R
person Ravi    schedule 20.06.2015
comment
Хм, а как именно мне его импортировать? когда я пытаюсь импортировать com.name.game.R, это не работает. Мой R.java находится в Project name\android\gen\com\google\android\gms - person urban07; 20.06.2015
comment
если ваше имя пакета.R не работает, значит, в вашем макете или манифесте есть какие-то ошибки, попробуйте очистить свой проект и проверить в консоли детали ошибки. - person Ravi; 20.06.2015
comment
Ничего себе, я импортировал проект Android в ядро, и теперь он работает, но теперь у меня есть проблема: AdView adView = (AdView)this.findViewById(R.id.adView); - Метод findViewById(int) не определен для типа GameScreen - person urban07; 20.06.2015
comment
GameScreen должен расширять активность и не нужно писать это, просто попробуйте с findViewById() - person Ravi; 20.06.2015
comment
Что ж, отчасти это помогло. Теперь у меня нет ошибок в коде, но в разделе «Проблемы» я вижу пару циклов A в пути сборки ошибок проекта. Я попытался перепроверить Android и очистить проекты, но это не сработало. - person urban07; 20.06.2015
comment
Хорошо, мне удалось избавиться от этой проблемы, но теперь, когда я запускаю игру и нажимаю "Пуск", она останавливается с ошибкой... i.stack.imgur.com/KZo98.png - person urban07; 20.06.2015
comment
Эта ошибка связана с тем, что вы что-то меняете в пользовательском интерфейсе из фонового потока. - person Ravi; 21.06.2015
comment
Что ты имеешь в виду? Я не использую темы в этой конкретной игре. Когда я нажимаю «Пуск», игра меняет экран на GameScreen и запускает все. Я не думаю, что есть какие-то фоновые темы. - person urban07; 22.06.2015
comment
вы используете асинтаск, я прав? это только один вид нити - person Ravi; 22.06.2015
comment
Я так не думаю... Извините, я новичок в java :( Я использую библиотеку libGDX - может быть, она где-то там используется... - person urban07; 22.06.2015
comment
Хорошо, я избавился от всех ошибок, и реклама теперь работает :D Спасибо за вашу помощь! - person urban07; 26.06.2015

У меня такая же проблема в cocos2dx, у меня нет файла макета, и я хочу отображать рекламные баннеры admob, попробуйте это решение без создания XML-файла макета:

внутри функции onCreate:

        adView = new AdView(this);
        adView.setAdSize(AdSize.BANNER);
        adView.setAdUnitId("YOUR ID");

        AdRequest adRequest = new AdRequest.Builder().build();

        adView.loadAd(adRequest);

        adView.setBackgroundColor(Color.BLACK);
        adView.setBackgroundColor(0);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        int width = getDisplaySize(getWindowManager().getDefaultDisplay()).x;

        LinearLayout.LayoutParams adParams = new LinearLayout.LayoutParams(
                width, LinearLayout.LayoutParams.WRAP_CONTENT);
        addContentView(adView, adParams);

и getDisplaySize метод:

// Helper get display screen to avoid deprecated function use
        private Point getDisplaySize(Display d)
            {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
                {
                    return getDisplaySizeGE11(d);
                }
                return getDisplaySizeLT11(d);
            }

            @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
            private Point getDisplaySizeGE11(Display d)
            {
                Point p = new Point(0, 0);
                d.getSize(p);
                return p;
            }
            private Point getDisplaySizeLT11(Display d)
            {
                try
                {
                    Method getWidth = Display.class.getMethod("getWidth", new Class[] {});
                    Method getHeight = Display.class.getMethod("getHeight", new Class[] {});
                    return new Point(((Integer) getWidth.invoke(d, (Object[]) null)).intValue(), ((Integer) getHeight.invoke(d, (Object[]) null)).intValue());
                }
                catch (NoSuchMethodException e2) // None of these exceptions should ever occur.
                {
                    return new Point(-1, -1);
                }
                catch (IllegalArgumentException e2)
                {
                    return new Point(-2, -2);
                }
                catch (IllegalAccessException e2)
                {
                    return new Point(-3, -3);
                }
                catch (InvocationTargetException e2)
                {
                    return new Point(-4, -4);
                }
            }
person Safwan Hijazi    schedule 20.06.2015
comment
попробуйте импортировать классы и определите adView как глобальную переменную, как это AdView adView; - person Safwan Hijazi; 20.06.2015
comment
Ну ошибок много. Дай мне минутку, я постараюсь вставить их сюда - person urban07; 20.06.2015
comment
@urban07 Вы пробовали решение и, пожалуйста, добавьте ошибку? - person Safwan Hijazi; 20.06.2015
comment
Извините, я думаю, что у @Ravi есть лучшее решение, поэтому я просто использую его (теперь я избавился почти от всех ошибок) - person urban07; 20.06.2015
comment
Хорошо, но я пытаюсь дать вам решение, если у вас нет XML-файла макета, и я использовал это решение в своих играх, в любом случае это ваше решение. - person Safwan Hijazi; 20.06.2015