2017-08-05 85 views
0

我想通过webView中的触发器来执行AdMob添加,但我无法访问该方法。它一直要求我使静态方法,但如果我这样做,我无法访问我的一个变量。如何调用displayAd()方法?

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    private InterstitialAd mInterstitialAd; 
    private WebView mWebView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_MainActivity); 
      MobileAds.initialize(this, "ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX"); 
      mInterstitialAd = new InterstitialAd(this); 
      mInterstitialAd.setAdUnitId("ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX"); 
      mInterstitialAd.loadAd(new AdRequest.Builder().build()); 
      mWebView = (WebView) findViewById(R.id.MainActivity); 
      mWebView.addJavascriptInterface(new WebAppInterface(this), "android"); 
    } 

    public void displayAd() { 
      [Ad Code Here] 
    } 
} 

WebAppInterface.java

public class WebAppInterface { 
     Context mContext; 

     WebAppInterface(Context c) { 
      mContext = c; 
     } 

     @JavascriptInterface 
     public void ad() { 
      MainActivity.displayAd(); 
     } 
    } 

此代码将无法正常工作。我怎样才能改变它,使其工作?

+0

为什么这个代码不工作?请发布错误消息,并在帖子中突出显示错误消息中的所有行号。 – tima

+0

@tima无法构建项目,因为它说我的displayAd()函数需要是静态的。当我将其更改为静态时,它会丢失对mInterstitialAd元素的引用。 – TheAndroidProgrammer

回答

0

试试这个。

public class WebAppInterface { 
     MainActivity mainActivity; 

     WebAppInterface(MainActivity mainActivity) { 
      this.mainActivity= mainActivity; 
     } 

     @JavascriptInterface 
     public void ad() { 
      mainActivity.displayAd(); 
     } 
    } 

,并通过活动引用接口像

mWebView.addJavascriptInterface(new WebAppInterface(MainActivity.this), "android"); 
+0

在WebAppInterface文件中获取“无法解析displayAd()”。这阻止了我构建应用程序。 – TheAndroidProgrammer

+0

@TheAndroidProgrammer尝试更新的答案。在Webappinterface文件中将'Activity'更改为'MainActivity' –

+0

工作原理...有点类似。它会显示我放在那里进行测试的日志文本,但广告实际上并未打开。我知道广告正确加载,因为我有一个侦听器,可以确保在加载webView之前加载广告。目前在displayAd()和mInterstitialAd中有'mInterstitialAd.show();'是MainActivity中的一个公共变量。在Javascript界面​​文件中也尝试过'mainActivity.mInterstitialAd.show()',但是也没有打开广告。任何想法或我应该打开一个新的问题线程?没有看到广告代码, – TheAndroidProgrammer