【问题标题】:I get null reference of EditText of a recyclerview item when user clicks on a button of the same item当用户单击同一项目的按钮时,我得到一个 recyclerview 项目的 EditText 的空引用
【发布时间】:2021-05-23 20:52:17
【问题描述】:

我在片段名称“Fragment_Wallet”中有一个回收视图名称“listadsoffers”,其中包含一个项目列表,每个项目都是此布局中的布局 (adsoffer_item.xml) 我想保存用户单击发送时输入的电子邮件地址请求按钮问题是编辑电子邮件文本发送一个空对象引用我已经尽了全力并在这个论坛上尝试了许多类似的问题,但我没有解决问题

我的适配器类:

public class AdsOfferAdapter extends RecyclerView.Adapter<AdsOfferAdapter.AdsOfferViewHolder>  {
    
        private Retrofit retrofit;
        private RetrofitInterface retrofitInterface;
        Context context;
    
        EditText eagerest ;
    
        ArrayList<AdsOffer> Adsoffers;
        public AdsOfferAdapter(Context context, ArrayList<AdsOffer> AdsOffers) {
    
            this.context = context;
            this.Adsoffers = AdsOffers;
        }
        @NonNull
        @Override
        public AdsOfferViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(context).inflate(R.layout.adsoffer_item,null);
    
            return new AdsOfferAdapter.AdsOfferViewHolder(view);
        }
        
        @Override
        public void onBindViewHolder(@NonNull AdsOfferViewHolder holder, int position) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(util.BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            retrofitInterface = retrofit.create(RetrofitInterface.class);
    
            final AdsOffer model=Adsoffers.get(position);
            holder.points.setText(model.getPoints()+"");
            holder.name.setText(model.getName());
    
            holder.btnRequest.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // here i have the error
                    String email=holder.email.getText().toString();
                    //sendRequest(email)
                }
            });
    
        }
        public class  AdsOfferViewHolder extends RecyclerView.ViewHolder { // view.onclicklistener
            TextView name;
            TextView points;
            Button btnRequest;
            EditText email;
            ConstraintLayout constraintLayout;
            public AdsOfferViewHolder(@NonNull View itemView) {
                super(itemView);
    
                name=itemView.findViewById(R.id.nameApp);
                points=itemView.findViewById(R.id.points);
                btnRequest=itemView.findViewById(R.id.sendRequest);
                email =  itemView.findViewById(R.id.emailBox);
    
            }
    
        }
        @Override
        public int getItemCount() {
            return Adsoffers.size();
        }
       }

这一行的错误抛出:

                        // here i have the error
                        String email=holder.email.getText().toString();
                        //sendRequest(email)
                   

我的模型类:

public class AdsOffer {
    public void setName(String name) {
        this.name = name;
    }

    public void setPoints(int points) {
        this.points = points;
    }

    public AdsOffer(String name, int points) {
        this.name = name;
        this.points = points;
    }


    private String name;
    private int points;

    public String getName() {
        return name;
    }

    public int getPoints() {
        return points;
    }
}

我的广告报价项目 adsoffer_item.xml :

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".WalletFragment">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintlayout"
        android:layout_width="match_parent"
        android:layout_height="266dp">

        <Button
            android:id="@+id/sendRequest"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:background="@drawable/button_3"
            android:fontFamily="@font/roboto_bold"
            android:text="Send Request"
            android:textColor="@color/primary"
            app:backgroundTint="#FFFFFF"
            app:layout_constraintEnd_toEndOf="@+id/emailbox"
            app:layout_constraintStart_toStartOf="@+id/emailbox"
            app:layout_constraintTop_toBottomOf="@+id/textView5" />

        <EditText
            android:id="@+id/emailbox"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:background="@drawable/textbox"
            android:drawableLeft="@drawable/ic_paypal"
            android:drawablePadding="10dp"
            android:ems="10"
            android:fontFamily="@font/roboto_bold"
            android:hint="Paypal Email Address"
            android:inputType="textWebEmailAddress|textPersonName"
            android:padding="15dp"
            android:textColor="@android:color/white"
            android:textColorHint="@android:color/white"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView7" />

        <TextView
            android:id="@+id/nameApp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="16dp"
            android:fontFamily="@font/poppins_bold"
            android:textColor="@color/white"
            android:textSize="15dp"
            app:layout_constraintStart_toEndOf="@+id/textView4"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/points"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="3dp"
            android:fontFamily="@font/poppins_bold"
            android:textColor="@android:color/white"
            android:textSize="15dp"
            app:layout_constraintBottom_toBottomOf="@+id/textView7"
            app:layout_constraintStart_toEndOf="@+id/textView7"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/textView7"
            android:layout_width="89dp"
            android:layout_height="40dp"
            android:layout_marginEnd="24dp"
            android:layout_marginRight="24dp"
            android:layout_marginTop="16dp"
            android:layout_weight="1"
            android:fontFamily="@font/poppins_bold"
            android:text="Points :"
            android:textColor="@color/white"
            android:textSize="15dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/nameApp"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:fontFamily="@font/poppins_bold"
            android:text="Name App  :"
            android:textColor="@color/white"
            android:textSize="15dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:fontFamily="@font/roboto_bold"
            android:text="5000 points = 15 $"
            android:textColor="#FFFFFF"
            app:layout_constraintEnd_toEndOf="@+id/emailbox"
            app:layout_constraintStart_toStartOf="@+id/emailbox"
            app:layout_constraintTop_toBottomOf="@+id/emailbox" />

        <View
            android:id="@+id/view2"
            android:layout_width="100dp"
            android:layout_height="5dp"
            android:layout_gravity="center"
            android:layout_marginTop="24dp"
            android:background="@color/white"
            app:layout_constraintEnd_toEndOf="@+id/sendRequest"
            app:layout_constraintStart_toStartOf="@+id/sendRequest"
            app:layout_constraintTop_toBottomOf="@+id/sendRequest" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</FrameLayout>

我的包含回收视图的片段布局我将其命名为 listadoffers

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#673AB7"
    tools:context=".WalletFragment">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/listadsoffers"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>

最后我的片段(片段钱包)在这里我初始化我的适配器,他显示所有项目但是当我编辑编辑文本并单击按钮发送请求时我有这个错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.text.Editable android.widget.EditText.getText()”

    public class WalletFragment extends Fragment {
    
        FragmentWalletBinding binding;
        Context c =null;
       // User user;
        private Retrofit retrofit;
        private RetrofitInterface retrofitInterface;
        ArrayList<AdsOffer> offers=new ArrayList<>();
         AdsOfferAdapter adapter;
        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            c= context;
        }
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
        }
    
        public void LoadAdsOffers(AdsOfferAdapter adapter ){
    
           offers.clear();
    
            ProgressDialog dialog;
            dialog = new ProgressDialog(getContext());
            dialog.setMessage("Please Wait...");
            dialog.show();
    
            retrofitInterface = retrofit.create(RetrofitInterface.class);
            Call<AdsOffer[]> call =  retrofitInterface.GetListOffers();
            call.enqueue(new Callback<AdsOffer[]>() {
                @Override
                public void onResponse(Call<AdsOffer[]> call, Response<AdsOffer[]> response) {
                    if(response.code()==200){
                        dialog.dismiss();
    
                        binding.listadsoffers.setAdapter(adapter);
                        adapter.notifyDataSetChanged();
                        Collections.addAll(offers,response.body());
    
                    }
                }
    
                @Override
                public void onFailure(Call<AdsOffer[]> call, Throwable t) {
                    Toast.makeText(getContext(), t.getMessage(),
                            Toast.LENGTH_LONG).show();
    
                    dialog.dismiss();
                }
            });
    
    
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            binding= FragmentWalletBinding.inflate(getLayoutInflater(),container,false);
    
    
            binding.listadsoffers.setLayoutManager(new GridLayoutManager(getContext(),1));
    
            retrofit = new Retrofit.Builder()
                    .baseUrl(util.BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
    
            adapter=new AdsOfferAdapter(c,offers);
            LoadAdsOffers(adapter);
            return binding.getRoot();
        }


}

【问题讨论】:

    标签: java android android-recyclerview


    【解决方案1】:

    我认为有一个 id 不匹配,您正在搜索一个 id 但在 XML 上有一个不同的 id

    email =  itemView.findViewById(R.id.emailBox);
    
    android:id="@+id/emailbox"
    

    【讨论】:

    • 天啊!! 2 天的时间寻找这个错误,我认为这是一个比这更大的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多