在空对象引用上具有'java.lang.String android.content.Context.getPackageName()'的应用程序



我创建了一个回收器视图来显示数据。我想在点击采访时显示敬酒信息。因此,我设置了这个

holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "item clicked!!", Toast.LENGTH_SHORT).show();
}
});

在适配器类的onbindViewHolder方法中。运行应用程序后,应用程序崩溃并显示此错误。

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ss.newapp, PID: 27382
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.widget.Toast.<init>(Toast.java:178)
at android.widget.Toast.makeText(Toast.java:595)
at android.widget.Toast.makeText(Toast.java:583)
at com.ss.newapp.DetailsAdapter$1.onClick(DetailsAdapter.java:50)
at android.view.View.performClick(View.java:7509)
at android.view.View.performClickInternal(View.java:7486)
at android.view.View.access$3600(View.java:841)
at android.view.View$PerformClick.run(View.java:28709)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:236)
at android.app.ActivityThread.main(ActivityThread.java:8061)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
D/OOMEventManagerFK: checkEventAndDumpForJE: 0
I/Process: Sending signal. PID: 27382 SIG: 9
Disconnected from the target VM, address: 'localhost:53359', transport: 'socket'

我检查了SO中关于此错误的其他解决方案,但它不适合我的代码。

这是我的Adapter.java类

public class DetailsAdapter extends
RecyclerView.Adapter<DetailsAdapter.ViewHolder> {
private List<Details> detailsList;
Context context;

public DetailsAdapter(List<Details> detailsList, Context context){
this.detailsList = detailsList;
this.context = context;
}
@NonNull
@Override
public DetailsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull DetailsAdapter.ViewHolder holder,
int position) {
holder.txtCusCode.setText(detailsList.get(position).getCode());
holder.txtCusName.setText(detailsList.get(position).getName());

holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "item clicked!!", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return detailsList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView txtCusName, txtCusCode;
public ViewHolder(@NonNull View itemView) {
super(itemView);
txtCusCode = itemView.findViewById(R.id.cusCodeTxt);
txtCusName = itemView.findViewById(R.id.cusNameTxt);
}
}
}

MainActivity.java

public class MainActivity extends AppCompatActivity {
Context context;
TextView textView;
RecyclerView recyclerView;
LinearLayoutManager layoutManager;
DetailsAdapter detailsAdapter;
List<Details> detailsList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
recyclerView = findViewById(R.id.recyclerview);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
detailsAdapter = new DetailsAdapter(detailsList, context);
recyclerView.setAdapter(detailsAdapter);
context = getApplicationContext();
getDetails();
}
private void getDetails() {
}

您必须先获得数据,然后设置适配器(复制此并尝试)

public class MainActivity extends AppCompatActivity {
Context context;
TextView textView;
RecyclerView recyclerView;
LinearLayoutManager layoutManager;
DetailsAdapter detailsAdapter;
List<Details> detailsList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = getApplicationContext();
getDetails();
textView = findViewById(R.id.textView);
recyclerView = findViewById(R.id.recyclerview);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
detailsAdapter = new DetailsAdapter(detailsList, context);
recyclerView.setAdapter(detailsAdapter);


}
private void getDetails() {
RetrofitClient.getRetrofitClient().getDetails().enqueue(new Callback<List<Details>>() {
@Override
public void onResponse(Call<List<Details>> call, Response<List<Details>> response) {
if(response.isSuccessful() && response.body() != null){
detailsList.addAll(response.body());
detailsAdapter.notifyDataSetChanged();
}
}
@Override
public void onFailure(Call<List<Details>> call, Throwable t) {
textView.setText((t.getMessage()));
}
});
}

相关内容