Java 当用户单击同一项的按钮时,我会得到recyclerview项的EditText的空引用

Java 当用户单击同一项的按钮时,我会得到recyclerview项的EditText的空引用,java,android,android-recyclerview,Java,Android,Android Recyclerview,我在片段名“Fragment\u Wallet”中有一个循环视图名“listadsoffers”,其中包含一个项目列表,每个项目都是布局(adsoffer\u item.xml)在这个布局中,我想保存用户在点击发送请求按钮时输入的电子邮件地址问题是编辑电子邮件文本发送空对象引用我已经尽了所有努力并在这个论坛中尝试了许多类似的问题,但我没有解决问题 我的适配器类: public class AdsOfferAdapter extends RecyclerView.Adapter<AdsOff

我在片段名“Fragment\u Wallet”中有一个循环视图名“listadsoffers”,其中包含一个项目列表,每个项目都是布局(adsoffer\u 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();
        }
       }
我的模型课:

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项目adsoffer\u 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();
        }


}
公共类WalletFragment扩展了片段{
零碎的钱包;
上下文c=null;
//用户;
私人改装;
专用接口;
ArrayList offers=新的ArrayList();
AdsOfferAdapter适配器;
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
c=上下文;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
公用void LoadAdsOffers(AdsOfferapter适配器){
提供。清除();
进程对话;
dialog=newprogressdialog(getContext());
setMessage(“请稍候…”);
dialog.show();
RefundationInterface=Refundation.create(RefundationInterface.class);
Call Call=interface.GetListOffers();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.code()==200){
dialog.dismise();
binding.listadsoffers.setAdapter(适配器);
adapter.notifyDataSetChanged();
Collections.addAll(offers,response.body());
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(getContext(),t.getMessage(),
Toast.LENGTH_LONG).show();
dialog.dismise();
}
});
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
binding=FragmentWalletBinding.flate(getLayoutInflater(),container,false);
binding.listadsoffers.setLayoutManager(新的GridLayoutManager(getContext(),1));
改装=新改装.Builder()
.baseUrl(util.BASE\u URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
适配器=新AdsOfferAdapter(c,提供);
LoadADS(适配器);
返回binding.getRoot();
}
}

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

email =  itemView.findViewById(R.id.emailBox);

android:id="@+id/emailbox"

天啊!!2天的搜索,我认为这是一个很大的问题比那谢谢你这么多!!!!!
email =  itemView.findViewById(R.id.emailBox);

android:id="@+id/emailbox"