简体   繁体   English

在RecyclerView中单击时,Admob原生广告崩溃

[英]Admob Native ads crashing when clicked in RecyclerView

I have an activity showing recyclerView along with Native Admob ads. 我有一个活动显示recyclerView以及Native Admob广告。 The ads are loading and everything is working perfect but when someone clicks on the ad, the app gets crashed. 广告正在加载,并且一切运行正常,但是当有人点击广告时,应用崩溃了。 Also the crash does not happen everytime but around every 5 times out of 10. 同样,崩溃并非每次都发生,而是每10次中大约有5次发生。

Here's the log: 这是日志:

                                                                      Process: aculix.com.rakshabandhan, PID: 16098
                                                                      java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                          at aculix.com.rakshabandhan.Fragments.OneFragment$2.onItemClick(OneFragment.java:133)
                                                                          at aculix.com.rakshabandhan.RecyclerItemClickListener.onInterceptTouchEvent(RecyclerItemClickListener.java:36)
                                                                          at android.support.v7.widget.RecyclerView.dispatchOnItemTouchIntercept(RecyclerView.java:2628)
                                                                          at android.support.v7.widget.RecyclerView.onInterceptTouchEvent(RecyclerView.java:2674)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2175)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
                                                                          at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
                                                                          at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:416)
                                                                          at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1808)
                                                                          at android.app.Activity.dispatchTouchEvent(Activity.java:3065)
                                                                          at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71)
                                                                          at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71)
                                                                          at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:378)
                                                                          at android.view.View.dispatchPointerEvent(View.java:10244)
                                                                          at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4444)
                                                                          at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4312)
                                                                          at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3859)
                                                                          at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3912)
                                                                          at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3878)
                                                                          at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4005)
                                                                          at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3886)
                                                                          at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4062)
                                                                          at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3859)
                                                                          at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3912)
                                                                          at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3878)
                                                                          at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3886)
                                                                          at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3859)
                                                                          at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6253)
                                                                          at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6227)
                                                                          at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6188)
                                                                          at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6356)
                                                                          at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
                                                                          at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
                                                                          at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)

I solved the problem. 我解决了问题。 For handling the clicks, I was using another class as shown below. 为了处理点击,我使用了另一个类,如下所示。

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;

public interface OnItemClickListener {
    public void onItemClick(View view, int position);
}

GestureDetector mGestureDetector;

public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
    mListener = listener;
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }
    });
}

@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
    View childView = view.findChildViewUnder(e.getX(), e.getY());
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
        mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
    }
    return false;
}

@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}}

And then in the fragment, I was setting up the click listener as below 然后在片段中,我如下设置了点击监听器

  recyclerView.addOnItemTouchListener(
            new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() {
                @Override public void onItemClick(View view, final int position) {
                    // TODO Handle item click



                }
            })
    );

Now I am handling the click listener inside the Adapter as shown below and it is working perfectly. 现在,我正在处理适配器内的Click侦听器,如下所示,它工作正常。

 myViewHolder.rInfo.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    }
            });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM