java.lang.NullPointerException для android.widget.TextView.setText([дубликат]

java.lang.NullPointerException: попытка вызвать виртуальный метод void android.widget.TextView.setText(java.lang.CharSequence) для ссылки на нулевой объект для Unified Native Ad от Admob

(По какой-то причине я не могу использовать последнюю версию admob SDK)

Моя версия - 19.5.0

ad_unified.xml

      <com.google.android.gms.ads.formats.UnifiedNativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Advertisements"
            android:textSize="16sp"
            android:padding="5dp"
            android:background="@color/colorAccent"
            android:textColor="@android:color/white"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"/>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/adunifiedLinearLayout1">

            <ImageView
                android:src="@android:drawable/ic_delete"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:id="@+id/adunifiedImageView1"/>

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1.0">

                <RatingBar
                    android:id="@+id/ad_stars"
                    style="?android:attr/ratingBarStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:isIndicator="true"
                    android:numStars="5"
                    android:stepSize="0.5"/>

                <TextView
                    android:id="@+id/appinstall_headline"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textSize="16sp"/>

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Text"
                    android:id="@+id/appinstall_body"/>

            </LinearLayout>

            <TextView
                android:id="@+id/appinstall_call_to_action"
                android:background="@color/colorAccent"
                android:textColor="#FF0078FF"
                android:textSize="16sp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        </LinearLayout>

        <com.google.android.gms.ads.formats.MediaView
            android:id="@+id/appinstall_media"
            android:layout_width="match_parent"
            android:layout_height="175dp"
            android:layout_below="@id/adunifiedLinearLayout1"/>

    </RelativeLayout>

</com.google.android.gms.ads.formats.UnifiedNativeAdView>

В коде Java

      private void pupulateNativeAd(final UnifiedNativeAd unifiedNativeAd, UnifiedNativeAdView adView) {
        ImageView icon = (ImageView) adView.findViewById(R.id.adunifiedImageView1);
        TextView headline = (TextView) adView.findViewById(R.id.appinstall_headline);
        TextView body = (TextView) findViewById(R.id.appinstall_body);
        TextView callAction = (TextView) adView.findViewById(R.id.appinstall_call_to_action);
        MediaView media = (MediaView) adView.findViewById(R.id.appinstall_media);
        adView.setIconView(icon);
        adView.setHeadlineView(headline);
        adView.setBodyView(body);
        adView.setCallToActionView(callAction);
        adView.setMediaView(media);
        
        icon.setImageDrawable(unifiedNativeAd.getIcon().getDrawable());
        headline.setText(unifiedNativeAd.getHeadline());
        if(unifiedNativeAd.getBody().isEmpty()){
            body.setVisibility(View.GONE);
        }else{
            body.setText(unifiedNativeAd.getBody());
        }
        media.setMediaContent(unifiedNativeAd.getMediaContent());
        callAction.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View p1) {
                        Intent i = new Intent();
                        i.setAction(Intent.ACTION_VIEW);
                        i.setData(Uri.parse(unifiedNativeAd.getCallToAction()));
                    }
                });
        adView.setNativeAd(unifiedNativeAd);

Все работает нормально, если я прокомментирую как

      /*if(unifiedNativeAd.getBody().isEmpty()){
            body.setVisibility(View.GONE);
        }else{
            body.setText(unifiedNativeAd.getBody());
        }*/

** Итак, возникло исключение, и я не знаю, как исправить

1 ответ

U пропустил использование adView при инициализации объекта body, поэтому замените это

      TextView body = (TextView) findViewById(R.id.appinstall_body);

с участием

      TextView body = (TextView) adView.findViewById(R.id.appinstall_body);
Другие вопросы по тегам