java - 在 android studio 上的 cardview 上面对 Java.lang.NullPointerEXception

标签 java android xml

这个问题在这里已经有了答案:





java.lang.NullPointerException on setOnClickListener in Fragment

(1 个回答)


2年前关闭。




我正在实现 set Toggle 按钮,单击后卡片 View 会更改颜色,但不幸的是,当我尝试登录我的 android 并且应用程序立即崩溃时出现错误。

这是我的 Java 类

package com.univibezstudios.ocappservice.ocapp;

import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.cardview.widget.CardView;
import androidx.fragment.app.Fragment;

import com.univibezstudios.ocappservice.ocapp.R;


public class ClearFragmentAEA extends Fragment {
    public ClearFragmentAEA(){

        //this is the Center of Information  clearance form

        //Required empty Constructor
    }


protected  CardView cardView,cardViewbusar,cardViewsuahub,cardViewcict,cardViewDos,cardViewsports,cardViewedu,cardViewgeog,cardViewinfo,cardViewbio,cardViewchemphy;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
       final View v =inflater.inflate (R.layout.fragment_clearaea, container, false);

       cardView =(CardView)v.findViewById (R.id.snalaea);
       cardViewbusar=(CardView)v.findViewById (R.id.bursarr);
       cardViewsuahub=(CardView)v.findViewById (R.id.suahub);
       cardViewcict =(CardView)v.findViewById (R.id.cict);
       cardViewDos=(CardView)v.findViewById (R.id.Dos);
       cardViewsports=(CardView)v.findViewById (R.id.sports);
       cardViewbio =(CardView)v.findViewById (R.id.bioscience);
       cardViewchemphy=(CardView)v.findViewById (R.id.chemphys);
       cardViewedu =(CardView)v.findViewById (R.id.educationdept);
       cardViewgeog=(CardView)v.findViewById (R.id.geogenv);
       cardViewinfo=(CardView)v.findViewById (R.id.infomathe);

        //set Events
        setToggle(cardView);
        setToggle (cardViewbusar);
        setToggle (cardViewDos);
        setToggle (cardViewcict);
        setToggle (cardViewsuahub);
        setToggle (cardViewsports);
        setToggle (cardViewbio);
        setToggle (cardViewinfo);
        setToggle (cardViewedu);
        setToggle (cardViewchemphy);
        setToggle (cardViewgeog);

        return v;

    }

    private void setToggle(final CardView cardView) {
        cardView.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick(View v) {


                if(cardView.getCardBackgroundColor ().getDefaultColor () ==-1)
                {
                    //change background color
                    cardView.setCardBackgroundColor (Color.parseColor ("#5B7683"));
                    Toast.makeText (getActivity (),"Request Sent",Toast.LENGTH_LONG).show ();
                    //disabling the button after one click
                    cardView.setEnabled (false);
                }
                else {

                    cardView.setCardBackgroundColor (Color.parseColor ("#ffffff"));

                }
            }
        });


    }

}

这是我的 fragment XML
   <androidx.cardview.widget.CardView
   android:layout_width="160dp"
   android:layout_height="190dp"
   android:layout_margin="10dp">

   <androidx.cardview.widget.CardView
      android:id="@+id/snalaea"
      android:orientation="vertical"
      android:gravity="center"
      android:layout_width="match_parent"
      android:layout_height="match_parent">

      <ImageView
         android:id="@+id/snalpicha"
         android:layout_gravity="center"
         android:padding="10dp"
         android:src="@drawable/snal"
         android:layout_width="120dp"
         android:layout_height="120dp" />

      <TextView
         android:id="@+id/snaltext"
         android:layout_gravity="center"
         android:textSize="20sp"
         android:textStyle="bold"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="@string/snal"
         android:fontFamily="sans-serif-black"
         android:layout_marginTop="70dp"/>
   </androidx.cardview.widget.CardView>

我得到的错误

AndroidRuntime:致命异常(exception):主要
进程:com.univibezstudios.ocappservice.ocapp,PID:14933
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void androidx.cardview.widget.CardView.setOnClickListener(android.view.View$OnClickListener)”
在 com.univibezstudios.ocappservice.ocapp.ClearFragmentAEA.setToggle(ClearFragmentAEA.java:73)
在 com.univibezstudios.ocappservice.ocapp.ClearFragmentAEA.onCreateView(ClearFragmentAEA.java:61)
在 androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439)
在 androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
在 androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
在 androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:797)
在 androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
在 androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
在 androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
在 androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
在 androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
在 androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
在 androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
在 androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:620)
在 androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
在 android.app.Activity.performStart(Activity.java:7157)
在 android.app.ActivityThread.handleStartActivity(ActivityThread.java:3042)
在 android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
在 android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
在 android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1837)
在 android.os.Handler.dispatchMessage(Handler.java:106)
在 android.os.Looper.loop(Looper.java:193)
在 android.app.ActivityThread.main(ActivityThread.java:6803)
在 java.lang.reflect.Method.invoke( native 方法)
在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
进程 14933 终止。

最佳答案

您可以尝试将“设置事件”代码移动到 onViewCreated :

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
  super.onViewCreated(view, savedInstanceState);
  //set Events
  setToggle(cardView);
  setToggle (cardViewbusar);
  setToggle (cardViewDos);
  setToggle (cardViewcict);
  setToggle (cardViewsuahub);
  setToggle (cardViewsports);
  setToggle (cardViewbio);
  setToggle (cardViewinfo);
  setToggle (cardViewedu);
  setToggle (cardViewchemphy);
  setToggle (cardViewgeog);
}


应用程序崩溃,因为 View 可能未完全初始化并导致 NullPointerExceptiononCreateView .

关于java - 在 android studio 上的 cardview 上面对 Java.lang.NullPointerEXception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59016455/

相关文章:

java - 过滤 HashMap 时输出不正确

java - 拍照时如何开启原生编辑图片?

java - 将视频嵌入到 Java 应用程序中?

android - 行无法使用代码动态添加到 Android 中的表格布局

android - xml 中的未绑定(bind)前缀

java - 条件为恰好使用 m 个硬币的硬币找零问题

java - 如何跳过初始数据并仅触发 Firestore Firebase 中的新更新?

android - 是否有任何代码可以在不裁剪和缩放android的情况下设置墙纸?

xml - 从 Delphi 7 使用 XML

java - SAX 解析异常 : The prefix "xsi" for attribute "xsi:schemaLocation" is not bound