【发布时间】: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