尝试在 flutter java 项目中默认实现 NativeAdFactory imports deprecated 方法
trying to implement NativeAdFactory imports deprecated method by default in flutter java project
我正在尝试按照本教程进行操作:https://codelabs.developers.google.com/codelabs/admob-inline-ads-in-flutter#7
我将此代码复制到名为 ListTileNativeAdFactory
的 class 中
import com.google.android.gms.ads.nativead.NativeAd;
import com.google.android.gms.ads.nativead.NativeAdView;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.Map;
import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin;
class ListTileNativeAdFactory implements GoogleMobileAdsPlugin.NativeAdFactory {
private final Context context;
ListTileNativeAdFactory(Context context) {
this.context = context;
}
@Override
public NativeAdView createNativeAd(
NativeAd nativeAd, Map<String, Object> customOptions) {
NativeAdView nativeAdView = (NativeAdView) LayoutInflater.from(context)
.inflate(R.layout.list_tile_native_ad, null);
TextView attributionViewSmall = nativeAdView
.findViewById(R.id.tv_list_tile_native_ad_attribution_small);
TextView attributionViewLarge = nativeAdView
.findViewById(R.id.tv_list_tile_native_ad_attribution_large);
ImageView iconView = nativeAdView.findViewById(R.id.iv_list_tile_native_ad_icon);
NativeAd.Image icon = nativeAd.getIcon();
if (icon != null) {
attributionViewSmall.setVisibility(View.VISIBLE);
attributionViewLarge.setVisibility(View.INVISIBLE);
iconView.setImageDrawable(icon.getDrawable());
} else {
attributionViewSmall.setVisibility(View.INVISIBLE);
attributionViewLarge.setVisibility(View.VISIBLE);
}
nativeAdView.setIconView(iconView);
TextView headlineView = nativeAdView.findViewById(R.id.tv_list_tile_native_ad_headline);
headlineView.setText(nativeAd.getHeadline());
nativeAdView.setHeadlineView(headlineView);
TextView bodyView = nativeAdView.findViewById(R.id.tv_list_tile_native_ad_body);
bodyView.setText(nativeAd.getBody());
bodyView.setVisibility(nativeAd.getBody() != null ? View.VISIBLE : View.INVISIBLE);
nativeAdView.setBodyView(bodyView);
nativeAdView.setNativeAd(nativeAd);
return nativeAdView;
}
}
但问题是编译器告诉我需要实现 NativeAdFactory 方法:createNativeAd()
Class 'ListTileNativeAdFactory' must either be declared abstract or implement abstract method 'createNativeAd(UnifiedNativeAd, Map<String, Object>)' in 'NativeAdFactory'
当我 运行 项目没有重写上述方法时,我得到这个错误:
...ListTileNativeAdFactory.java:16: error: ListTileNativeAdFactory is not abstract and does not override abstract method createNativeAd(UnifiedNativeAd,Map<String,Object>) in NativeAdFactory
class ListTileNativeAdFactory implements GoogleMobileAdsPlugin.NativeAdFactory {
^
导入的google_mobile_ads包版本有问题,我只好用0.13.0版本
在 pubspec.yaml 文件中依赖项:
dependencies:
flutter_html: ^0.8.2
flutter:
sdk: flutter
google_mobile_ads: ^0.13.0 # was google_mobile_ads: ^0.12.2
provider: ^4.3.3
我正在尝试按照本教程进行操作:https://codelabs.developers.google.com/codelabs/admob-inline-ads-in-flutter#7
我将此代码复制到名为 ListTileNativeAdFactory
import com.google.android.gms.ads.nativead.NativeAd;
import com.google.android.gms.ads.nativead.NativeAdView;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.Map;
import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin;
class ListTileNativeAdFactory implements GoogleMobileAdsPlugin.NativeAdFactory {
private final Context context;
ListTileNativeAdFactory(Context context) {
this.context = context;
}
@Override
public NativeAdView createNativeAd(
NativeAd nativeAd, Map<String, Object> customOptions) {
NativeAdView nativeAdView = (NativeAdView) LayoutInflater.from(context)
.inflate(R.layout.list_tile_native_ad, null);
TextView attributionViewSmall = nativeAdView
.findViewById(R.id.tv_list_tile_native_ad_attribution_small);
TextView attributionViewLarge = nativeAdView
.findViewById(R.id.tv_list_tile_native_ad_attribution_large);
ImageView iconView = nativeAdView.findViewById(R.id.iv_list_tile_native_ad_icon);
NativeAd.Image icon = nativeAd.getIcon();
if (icon != null) {
attributionViewSmall.setVisibility(View.VISIBLE);
attributionViewLarge.setVisibility(View.INVISIBLE);
iconView.setImageDrawable(icon.getDrawable());
} else {
attributionViewSmall.setVisibility(View.INVISIBLE);
attributionViewLarge.setVisibility(View.VISIBLE);
}
nativeAdView.setIconView(iconView);
TextView headlineView = nativeAdView.findViewById(R.id.tv_list_tile_native_ad_headline);
headlineView.setText(nativeAd.getHeadline());
nativeAdView.setHeadlineView(headlineView);
TextView bodyView = nativeAdView.findViewById(R.id.tv_list_tile_native_ad_body);
bodyView.setText(nativeAd.getBody());
bodyView.setVisibility(nativeAd.getBody() != null ? View.VISIBLE : View.INVISIBLE);
nativeAdView.setBodyView(bodyView);
nativeAdView.setNativeAd(nativeAd);
return nativeAdView;
}
}
但问题是编译器告诉我需要实现 NativeAdFactory 方法:createNativeAd()
Class 'ListTileNativeAdFactory' must either be declared abstract or implement abstract method 'createNativeAd(UnifiedNativeAd, Map<String, Object>)' in 'NativeAdFactory'
当我 运行 项目没有重写上述方法时,我得到这个错误:
...ListTileNativeAdFactory.java:16: error: ListTileNativeAdFactory is not abstract and does not override abstract method createNativeAd(UnifiedNativeAd,Map<String,Object>) in NativeAdFactory
class ListTileNativeAdFactory implements GoogleMobileAdsPlugin.NativeAdFactory {
^
导入的google_mobile_ads包版本有问题,我只好用0.13.0版本
在 pubspec.yaml 文件中依赖项:
dependencies:
flutter_html: ^0.8.2
flutter:
sdk: flutter
google_mobile_ads: ^0.13.0 # was google_mobile_ads: ^0.12.2
provider: ^4.3.3