使用GMS 20.2.0的Android AdMob代码编译报错问题咨询
编译报错:public类MainActivity需对应同名文件的解决方法
报错信息
Interstitial.java:60: error: class MainActivity is public, should be declared in a file named MainActivity.java
问题描述
我有一个已存在的Interstitial.java文件,为适配新版Google Ads格式对其修改后出现上述编译报错。请问只需将代码移至MainActivity.java文件即可,还是需要同时修改代码?另外我已添加main_activity.xml文件,Android Studio界面无报错但编译时出现该问题。
相关代码
main_activity.xml内容
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SDLActivity"> </LinearLayout>
Interstitial.java修改后的代码
package org.libsdl.app; //* ADMOB import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; //import com.google.android.gms.ads.InterstitialAd; import com.google.android.gms.ads.interstitial.InterstitialAd; import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback; import com.google.android.gms.ads.MobileAds; import com.google.android.gms.ads.initialization.InitializationStatus; import com.google.android.gms.ads.initialization.OnInitializationCompleteListener; // */ import android.app.Activity; //* ADMOB import android.content.Context; import android.util.Log; import java.io.IOException; // */ public class MainActivity extends Activity { private static final String TAG = "MyActivity"; private InterstitialAd mInterstitialAd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MobileAds.initialize(this, new OnInitializationCompleteListener() { @Override public void onInitializationComplete(InitializationStatus initializationStatus) {} }); AdRequest adRequest = new AdRequest.Builder().build(); InterstitialAd.load(this,"ca-app-pub-3940256099942544/1033173712", adRequest, new InterstitialAdLoadCallback() { @Override public void onAdLoaded(@NonNull InterstitialAd interstitialAd) { // The mInterstitialAd reference will be null until // an ad is loaded. mInterstitialAd = interstitialAd; Log.i(TAG, "onAdLoaded"); } @Override public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { // Handle the error Log.d(TAG, loadAdError.toString()); mInterstitialAd = null; } }); } // */ }
解决步骤
必须迁移文件:Java语法强制要求public类的名称和文件名完全一致,所以你需要把
MainActivity类的所有代码移到MainActivity.java文件中(文件要放在org.libsdl.app包目录下,和原Interstitial.java同路径)。补充缺失的导入语句:当前代码缺少几个关键类的导入,会导致迁移后仍报错,需在MainActivity.java中添加:
import android.os.Bundle; import com.google.android.gms.ads.LoadAdError; import androidx.annotation.NonNull;修正布局文件的上下文指向:main_activity.xml中的
tools:context=".SDLActivity"和你的Activity类名不匹配,建议修改为:tools:context=".MainActivity"清理无效注释:代码末尾的
// */属于无效注释,建议删除,避免潜在的语法问题。
完成以上操作后,重新编译即可解决报错。
内容的提问来源于stack exchange,提问作者user2511756
相关产品推荐
相关产品推荐

