Why OnTouchListner is giving me null pointer excep

2019-07-09 19:44发布

Setting OnTouchListener to the Relative layout giving me NullPointerException.I don't know why.

Here is the code:

holder.alert_message.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {


                    ((GroupChatActivity) context).expandAlertRow(
                            position,holder.alert_message,holder.WholeView);    
            holder.arrowAlertButton.setRotation(360);

            return false;
        }
    });

code walks through return statement after that it crashes and give NullPointerException.

Here is the log:

 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.ViewGroup$LayoutParams android.view.View.getLayoutParams()' on a null object reference
            at android.widget.ListView.measureScrapChild(ListView.java:1210)
            at android.widget.ListView.measureHeightOfChildren(ListView.java:1292)
            at android.widget.ListView.onMeasure(ListView.java:1202)
            at android.view.View.measure(View.java:18596)
            at android.widget.RelativeLayout.measureChild(RelativeLayout.java:698)
            at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:482)
            at android.view.View.measure(View.java:18596)
            at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
            at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
            at android.view.View.measure(View.java:18596)
            at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
            at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
            at android.view.View.measure(View.java:18596)
            at android.widget.ListView.setupChild(ListView.java:1968)
            at android.widget.ListView.makeAndAddView(ListView.java:1889)
            at android.widget.ListView.fillSpecific(ListView.java:1364)
            at android.widget.ListView.layoutChildren(ListView.java:1671)
            at android.widget.AbsListView.onLayout(AbsListView.java:2627)
            at android.view.View.layout(View.java:16711)
            at android.view.ViewGroup.layout(ViewGroup.java:5328)
            at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1077)
            at android.view.View.layout(View.java:16711)
            at android.view.ViewGroup.layout(ViewGroup.java:5328)
            at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1077)
            at android.view.View.layout(View.java:16711)
            at android.view.ViewGroup.layout(ViewGroup.java:5328)
            at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1077)
            at android.view.View.layout(View.java:16711)
            at android.view.ViewGroup.layout(ViewGroup.java:5328)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
            at android.view.View.layout(View.java:16711)
            at android.view.ViewGroup.layout(ViewGroup.java:5328)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1556)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1465)
            at android.view.View.layout(View.java:16711)
            at android.view.ViewGroup.layout(ViewGroup.java:5328)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
            at android.view.View.layout(View.java:16711)
            at android.view.ViewGroup.layout(ViewGroup.java:5328)
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2319)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2032)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1191)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6642)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
            at android.view.Choreographer.doCallbacks(Choreographer.java:590)
            at android.view.Choreographer.doFrame(Choreographer.java:560)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5942)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

Very first I thought I am returning false this is the problem but after returning true I got the same Exception.I have googled a lot but could not find the reason.as it is answered here Returning true and false in OnTouch?

here is my getview() method code

    public View getView(final int position, View convertView, ViewGroup parent) {
    final MessageModel messageModel = bubbleMessageList.get(position);


    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    final ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.row_bubble_filling_adapter,
                parent, false);

        holder.senderName = (TextView) convertView.findViewById(R.id.sender_name_tv);
        holder.arrowAlertButton = (Button) convertView.findViewById(R.id.arrow_alert_button);
        holder.cancelAlertButton = (Button) convertView.findViewById(R.id.cancel_alert_button);
        holder.unreadCounter = (Button) convertView.findViewById(R.id.unreadCounterBtn);
        holder.Rl_ExpandView = (RelativeLayout) convertView.findViewById(R.id.Rl_ExpandView);
        holder.alert_message = (RelativeLayout) convertView.findViewById(R.id.alert_message);
        holder.WholeView = (RelativeLayout) convertView.findViewById(R.id.WholeView);
        holder.attachmentButton = (ImageButton) convertView.findViewById(R.id.btn_Attachment);
        holder.sendButton = (ImageButton) convertView.findViewById(R.id.btn_Send);
        holder.messageEditText = (EditText) convertView.findViewById(R.id.edt_message);
        holder.popupView=(View)convertView.findViewById(R.id.popupView);

        holder.cancelAlertButton.setTag(position);
        holder.alert_message.setTag(position);
        holder.arrowAlertButton.setTag(position);

        convertView.setTag(holder);

    } else
        holder = (ViewHolder) convertView.getTag();
    setName(messageModel, holder);

    if (messageModel.groupId !=null) {
        if (!holderMapper.containsKey(messageModel.groupId)) {
            //please don't delete this
           /* Collections.sort(bubbleMessageList, new Comparator<MessageModel>() {
                @Override
                public int compare(MessageModel messageModel, MessageModel t1) {
                    return t1.sendOn.compareTo(messageModel.sendOn);
                }
            });*/

            holderMapper.put(messageModel.groupId, holder);

        }
    } else {
        if (!holderMapper.containsKey(messageModel.senderId))
            holderMapper.put(messageModel.senderId, holder);
    }
  /*  if (!holderMapper.containsKey(messageModel.groupId) ) {
        if (messageModel.groupId != null)
            holderMapper.put(messageModel.groupId, holder);
        else
            holderMapper.put(messageModel.senderId, holder);
    }*/

    holder.sendButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!holder.messageEditText.getText().toString().trim().isEmpty()) {
                if (App.getCurrentActivity() instanceof GroupChatActivity) {
                    if (messageModel.groupId != null)
                        ((GroupChatActivity) context).sendBubbleMessage(
                                holder.messageEditText.getText().toString(),
                                ConstantsEnum.messageType.TextType.getValue(),
                                ConstantsEnum.contentType.Text.getValue(),
                                null, messageModel.groupId, "", "", null,
                                ConstantsEnum.subMessageType.Normal.getValue());
                    else
                        ((GroupChatActivity) context).sendBubbleMessageOneToOneCase(
                                holder.messageEditText.getText().toString(),
                                ConstantsEnum.messageType.TextType.getValue(),
                                ConstantsEnum.contentType.Text.getValue(),
                                null, messageModel.groupId, "", "", null,
                                ConstantsEnum.subMessageType.Normal.getValue());
                } else {
                    ((ChatActivity) context).sendBubbleMessage(
                            holder.messageEditText.getText().toString(),
                            ConstantsEnum.messageType.TextType.getValue(),
                            ConstantsEnum.contentType.Text.getValue(),
                            null, messageModel.groupId, "", "", null,
                            ConstantsEnum.subMessageType.Normal.getValue());
                }


                holder.messageEditText.setText("");


            } else
                AppUtility.showAlert(context, context
                                .getString(R.string.error), context
                                .getString(R.string.enter_text_to_send_message),
                        context.getString(R.string.ok));
        }
    });

    holder.arrowAlertButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            // TODO Auto-generated method stub
            if (messageModel.isExpand) {

                if (App.getCurrentActivity() instanceof GroupChatActivity)
                    ((GroupChatActivity) context).expandAlertRow(
                            position, holder.alert_message, holder.WholeView);
                else
                    ((ChatActivity) context).expandAlertRow(
                            position, holder.alert_message, holder.WholeView);

                int indexToRemove = 0;
                int pos = (Integer) view.getTag();
                if (messageModel.groupId != null) {
                    int groupID = bubbleMessageList.get(pos).groupId;
                    if (trackerForGroupId.containsKey(groupID)) {
                        trackerForGroupId.remove(groupID);
                        for (MessageModel messageModel1 : bubbleMessageList)
                            if (messageModel1.groupId == groupID)
                                indexToRemove = bubbleMessageList.indexOf(messageModel1);
                        bubbleMessageList.remove(indexToRemove);
                        holderMapper.remove(groupID);
                        if (App.getCurrentActivity() instanceof GroupChatActivity)
                            ((GroupChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
                        else
                            ((ChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
                    }
                } else {
                    int senderID = bubbleMessageList.get(pos).senderId;
                    if (trackerForGroupId.containsKey(senderID)) {
                        trackerForGroupId.remove(senderID);
                        for (MessageModel messageModel1 : bubbleMessageList)
                            if (messageModel1.senderId == senderID)
                                indexToRemove = bubbleMessageList.indexOf(messageModel1);
                        bubbleMessageList.remove(indexToRemove);
                        if (App.getCurrentActivity() instanceof GroupChatActivity)
                            ((GroupChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
                        else
                            ((ChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
                    }
                    //((ChatActivity) context).updateSprowtCounter(senderID);
                }

            } else {
                if (App.getCurrentActivity() instanceof GroupChatActivity) {
                    ((GroupChatActivity) context).expandAlertRow(
                            position, holder.alert_message, holder.WholeView);
                    int pos = (Integer) view.getTag();
                    int groupID = bubbleMessageList.get(pos).groupId;
                    ((GroupChatActivity) context).updateSprowtCounter(groupID);
                } else {
                    ((ChatActivity) context).expandAlertRow(
                            position, holder.alert_message, holder.WholeView);
                }

            }
            holder.arrowAlertButton.setRotation(360);

        }
    });

    holder.cancelAlertButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //[Removing bubble row from the list]
            int indexToRemove=0;
            int pos = (Integer) view.getTag();
           if (bubbleMessageList.get(pos).groupId != null) {
               int groupID = bubbleMessageList.get(pos).groupId;
               if (trackerForGroupId.containsKey(groupID)) {
                   trackerForGroupId.remove(groupID);
                   for (MessageModel messageModel1 : bubbleMessageList)
                       if (messageModel1.groupId == groupID)
                           indexToRemove = bubbleMessageList.indexOf(messageModel1);
                   bubbleMessageList.remove(indexToRemove);
                   holderMapper.remove(groupID);
                   if (App.getCurrentActivity() instanceof ChatActivity)
                       ((ChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
                   else
                       ((GroupChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
               }
           } else {
               int senderID = bubbleMessageList.get(pos).senderId;
               if (trackerForGroupId.containsKey(senderID)) {
                   trackerForGroupId.remove(senderID);
                   for (MessageModel messageModel1 : bubbleMessageList)
                       if (messageModel1.senderId == senderID)
                           indexToRemove = bubbleMessageList.indexOf(messageModel1);
                   bubbleMessageList.remove(indexToRemove);
                   if (App.getCurrentActivity() instanceof ChatActivity)
                       ((ChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
                   else
                       ((GroupChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
               }
           }
            //[End removing bubble row from the list]
            if (App.getCurrentActivity() instanceof  GroupChatActivity)
                ((GroupChatActivity) context).restoreLayoutToOriginalState();
            else
                ((ChatActivity) context).restoreLayoutToOriginalState();

        }
    });

    holder.attachmentButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PopupMenu popupMenu = new PopupMenu(context,holder.popupView);
            popupMenu
                    .setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem menuItem) {
                            switch (menuItem.getItemId()) {

                                case R.id.captureImage:
                                    if (App.getCurrentActivity() instanceof GroupChatActivity)
                                        ((GroupChatActivity) context).dispatchTakePictureIntent();
                                    else
                                        ((ChatActivity) context).dispatchTakePictureIntent();
                                    break;
                                case R.id.imageGallery:
                                    if (App.getCurrentActivity() instanceof GroupChatActivity)
                                        ((GroupChatActivity) context).takePictureFromGallery();
                                    else
                                        ((ChatActivity) context).takePictureFromGallery();
                                    break;
                                case R.id.recordVideo:
                                    if (App.getCurrentActivity() instanceof GroupChatActivity)
                                        ((GroupChatActivity) context).startMakingVideo();
                                    else
                                        ((GroupChatActivity) context).startMakingVideo();
                                    break;
                                case R.id.selectVideo:
                                    if (App.getCurrentActivity() instanceof GroupChatActivity)
                                        ((GroupChatActivity) context).takeVideoFromGallery();
                                    else
                                        ((GroupChatActivity) context).takeVideoFromGallery();
                                    break;
                            }
                            return true;
                        }
                    });
            popupMenu.inflate(R.menu.popup_menu);
            popupMenu.show();
        }
    });

    if (messageModel.isExpand)
        holder.Rl_ExpandView.setVisibility(View.VISIBLE);
    else
        holder.Rl_ExpandView.setVisibility(View.GONE);

    holder.alert_message.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (messageModel.isExpand) {

                if (App.getCurrentActivity() instanceof GroupChatActivity)
                    ((GroupChatActivity) context).expandAlertRow(
                            position, holder.alert_message, holder.WholeView);
                else
                    ((ChatActivity) context).expandAlertRow(
                            position, holder.alert_message, holder.WholeView);

                int indexToRemove = 0;
                int pos = (Integer) view.getTag();
                if (messageModel.groupId != null) {
                    int groupID = bubbleMessageList.get(pos).groupId;
                    if (trackerForGroupId.containsKey(groupID)) {
                        trackerForGroupId.remove(groupID);
                        for (MessageModel messageModel1 : bubbleMessageList)
                            if (messageModel1.groupId == groupID)
                                indexToRemove = bubbleMessageList.indexOf(messageModel1);
                        bubbleMessageList.remove(indexToRemove);
                        holderMapper.remove(groupID);
                        if (App.getCurrentActivity() instanceof GroupChatActivity)
                            ((GroupChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
                        else
                            ((ChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
                    }
                } else {
                    int senderID = bubbleMessageList.get(pos).senderId;
                    if (trackerForGroupId.containsKey(senderID)) {
                        trackerForGroupId.remove(senderID);
                        for (MessageModel messageModel1 : bubbleMessageList)
                            if (messageModel1.senderId == senderID)
                                indexToRemove = bubbleMessageList.indexOf(messageModel1);
                        bubbleMessageList.remove(indexToRemove);
                        if (App.getCurrentActivity() instanceof GroupChatActivity)
                            ((GroupChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
                        else
                            ((ChatActivity) context).bubbleFillingAdapter.notifyDataSetChanged();
                    }
                    //((ChatActivity) context).updateSprowtCounter(senderID);
                }

            } else {

                if (App.getCurrentActivity() instanceof GroupChatActivity) {
                    ((GroupChatActivity) context).expandAlertRow(
                            position, holder.alert_message, holder.WholeView);
                    //int pos = (Integer) view.getTag();
                   /* int groupID = bubbleMessageList.get(pos).groupId;
                    int id = ((GroupChatActivity) context).msgForGroup.sproutGroupId;

                    ((GroupChatActivity) context).updateSprowtCounter(id);*/
                } else {
                   /* MessageModel myMessageModel = new MessageModel();
                    myMessageModel.sproutGroupId = messageModel.groupId;
                    UserSession.getInstance().addQueueMessage(myMessageModel);*/
                            ((ChatActivity) context).expandAlertRow(
                                    position, holder.alert_message, holder.WholeView);
                }
            }
            holder.arrowAlertButton.setRotation(360);

            return true;
        }
    });


    if (messageModel.groupId != null)
        setCounter(messageModel.groupId);
    else setCounter(messageModel.senderId);

    return convertView;
}

0条回答
登录 后发表回答