不要在预览窗口创建线程 - 华为广告实施
Posted
技术标签:
【中文标题】不要在预览窗口创建线程 - 华为广告实施【英文标题】:Don't Create Threads in the preview window - Huawei Ads Implementation 【发布时间】:2021-10-25 08:24:17 【问题描述】:我正在安卓应用程序中实现华为广告。我已经浏览了所有https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/publisher-service-banner-0000001050066915 并成功实施了广告,但是 android studio preview 给了我错误,并且在 xml 中添加华为广告时没有显示预览。删除后华为广告预览显示。
以下是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<com.huawei.hms.ads.nativead.NativeView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/native_video_view"
android:layout_
android:layout_
android:layout_centerInParent="true"
android:background="#FFFFFF"
android:orientation="vertical">
<com.huawei.hms.ads.nativead.MediaView
android:id="@+id/ad_media"
android:layout_
android:layout_
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_
android:layout_
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="@color/white">
<TextView
android:id="@+id/ad_title"
android:layout_
android:layout_
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:alpha="1"
android:textColor="#000000"
android:textSize="@dimen/hiad_text_13_sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView
android:id="@+id/ad_source"
android:layout_
android:layout_
android:layout_marginStart="24dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="16dp"
android:alpha="0.6"
android:text="asdfasj"
android:maxWidth="158dp"
android:textColor="#666666"
android:textSize="@dimen/hiad_text_12_sp"
app:layout_constraintStart_toStartOf="@id/ad_title"
app:layout_constraintEnd_toStartOf="@id/ad_flag"
app:layout_constraintTop_toBottomOf="@id/ad_title"
/>
<TextView
android:id="@+id/ad_flag"
android:layout_
android:layout_
android:background="@drawable/native_flag_rounded_corners_shape"
android:text="@string/ad_flag"
android:textColor="#FFFFFF"
android:textSize="8sp"
android:layout_marginStart="@dimen/_10sdp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/ad_source"
app:layout_constraintStart_toEndOf="@id/ad_source"
app:layout_constraintTop_toTopOf="@id/ad_source" />
<Button
android:id="@+id/ad_call_to_action"
android:layout_
android:layout_
android:layout_alignParentEnd="true"
android:background="@drawable/native_button_rounded_corners_shape"
android:textColor="#FFFFFF"
android:textSize="10sp"
android:layout_marginEnd="@dimen/_20sdp"
app:layout_constraintBottom_toBottomOf="@+id/ad_source"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.huawei.hms.ads.nativead.NativeView>
以下是我遇到的错误 当我将根标签删除到约束布局时。预览在屏幕上可见,所有错误都消失了。在这两个标签中,我面临以下异常:
FirstException:不要在预览中创建线程
java.lang.IllegalStateException: 不允许新建 预览中的线程在 com.huawei.hms.ads.kn.newThread 在 java.util.concurrent.ThreadPoolExecutor$Worker.(ThreadPoolExecutor.java:623) 在 java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:912) 在 java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1343) 在 com.huawei.hms.ads.km.Code 在 com.huawei.hms.ads.km.I 在 com.huawei.hms.ads.lj.Code 位于 com.huawei.hms.ads.lj.V 位于 com.huawei.hms.ads.dl.Z 在 com.huawei.hms.ads.dl.V 在 com.huawei.hms.ads.dl.Code 位于 com.huawei.openalliance.ad.views.PPSNativeView.Code 位于 com.huawei.openalliance.ad.views.PPSNativeView。在 com.huawei.hms.ads.nativead.NativeView。在 jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-2) 在 jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:490) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:657) android.view.LayoutInflater.inflate(LayoutInflater.java:499)
第二个例外:无法实例化一个或多个类 无法实例化以下类: - com.huawei.hms.ads.nativead.MediaView(开放类,显示异常,清除缓存) - com.huawei.openalliance.ad.views.VideoView (Open Class, Show Exception, Clear Cache) 提示:在自定义中使用 View.isInEditMode() 在 IDE 中显示时跳过代码或显示示例数据的视图。如果这 是意外错误你也可以尝试构建项目,然后 手动刷新布局。异常详情 java.lang.NullPointerException 在 com.huawei.openalliance.ad.views.NativeVideoView.Code 位于 com.huawei.openalliance.ad.views.NativeVideoView。在 com.huawei.hms.ads.nativead.MediaView.Code 位于 com.huawei.hms.ads.nativead.MediaView。在 jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-2) 在 jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:490) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959) 在 android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1121) 在 android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:1095) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:680) android.view.LayoutInflater.inflate(LayoutInflater.java:499)
我已使缓存无效并重新启动 Android Studio,但还没有任何效果。谁能帮我渲染预览。任何帮助,将不胜感激。谢谢
【问题讨论】:
这明显是SDK的bug,建议你去华为投诉 感谢您提供有关此问题的信息,我们已将其报告给研发团队,如果我们需要进一步的信息或您的帮助,将尽快与您联系。 感谢您的回复。 【参考方案1】:目前Ads kit SDK引用了HMS base SDK代码,但是好像没有集成HMS base SDK。
因此,预览期间出现以下错误。
如果您选择不集成HMS base SDK,Ads SDK功能不受影响,但在预览时会受到影响。
所以有两个选项供您参考: 一种方法是你可以尝试集成hms base sdk,或者另一种方法是忽略这个预览错误,因为这不会影响实际操作。
【讨论】:
我有示例应用程序,其中集成了 HMS 基础 SDK,但我仍然收到 Thread 异常并且没有查看预览。以下是屏幕截图的链接。 ibb.co/hCnwfht .. 这是我评论横幅 xml 标记时的链接。预览可见ibb.co/9VjDzc1 我不认为“忽略此预览错误”是一个好的选择。 如果我忽略此预览,我将如何根据设计调整布局? hi@waheed shah,你能不能试着把 NativeView 改成 RelativeLayout,调整一下再改回来? 嗨@shirley 目前我正在更改视图以根据设计进行调整。等待修复。感谢您的即时回复。以上是关于不要在预览窗口创建线程 - 华为广告实施的主要内容,如果未能解决你的问题,请参考以下文章