私は自分のアクティビティに対してリサイクラビューを実装したいが、リターンサイズではNullPointerExceptionを取得し続ける。リサイクラービューでスワイプリフレッシュを行いたいエラーログも提供されます。お知らせ下さい。どんな助けでも本当に感謝しています。以下に示すように戻り値のサイズがNULLのときにアダプタ上のヌルポインタ
コード:
MainActivity.java
private JobAdapter adapter;
private List<Job> listJob;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.list_job, container, false);
swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipeRefreshLayout);
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
adapter = new JobAdapter(getActivity());
recyclerView.setAdapter(adapter);
if (savedInstanceState != null) {
Logging.m("TabActive: Job is empty");
} else {
parseResponse();
}
//update adapter to containing the retrieved job
adapter.setJob(listJob);
return view;
}
private void parseResponse(){
if(response==null || response.length()==0){
return;
}
try{
JSONObject jObjstats = new JSONObject(response);
status = jObjstats.getString(Keys.EndPoint.KEY_RETURN);
if (!status.equalsIgnoreCase("success")){
reason = jObjstats.getString(Keys.EndPoint.KEY_RETURN);
if (reason.equalsIgnoreCase("No Found")) {
recyclerView.setBackground(getResources().getDrawable(R.drawable.bg1));
}
}
else if(status.equalsIgnoreCase("success")){
booking = jObjstats.getString(Keys.EndPoint.KEY_BOOKING);
JSONArray jArray = new JSONArray(booking);
for(int i = 0; i<jArray.length(); i++) {
Job setJob = new Job();
JSONObject json = null;
try {
json = jArray.getJSONObject(i);
setJob.setRef(json.getString("ref"));
setJob.setPhone(json.getString("contact"));
setJob.setNote(json.getString("notes"));
} catch (JSONException e) {
Log.i(TAG, e.toString()+" Volley error");
e.printStackTrace();
}
listJob.add(setJob);
}
adapter.setJob(listJob);
//Adding adapter to recycler view
recyclerView.setAdapter(adapter);
}
}
catch(Exception e){
Log.i(TAG, e.getMessage());
}
}
JobAdapter.java
public class JobAdapter extends RecyclerView.Adapter<JobAdapter.ViewHolderJob> {
private static final String TAG = "Job Adapter";
private Context context;
private List<Job> Job;
private LayoutInflater mInflater;
public JobAdapter(Context context){
mInflater = LayoutInflater.from(context);
this.context = context;
}
public void setJob(List<Job> Job) {
this.Job = Job;
//update the adapter to reflect the new of job
notifyDataSetChanged();
}
@Override
public ViewHolderJob onCreateViewHolder(ViewGroup parent, int viewType) {
View v = mInflater.inflate(R.layout.fragment_list_job, parent, false);
ViewHolderJob viewHolder = new ViewHolderJob(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolderJob holder, int position) {
//Getting the particular item from the list
final Job job = Job.get(position);
holder.tvServiceType.setText(job.getServiceType());
holder.tvFromPoint.setText(job.getFromPoint());
holder.tvDestPoint.setText(job.getDestPoint());=
holder.mainLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(context, JobDetailsActivity.class);
intent.putExtra(JobDetailsActivity.EXTRA_NOTE, job.getNote());
intent.putExtra(JobDetailsActivity.EXTRA_PHONE, job.getPhone());
intent.putExtra(JobDetailsActivity.EXTRA_TIPS, job.getTips());
intent.putExtra(JobDetailsActivity.EXTRA_STATUS, job.getStatus());
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return Job.size();
}
static class ViewHolderJob extends RecyclerView.ViewHolder{
//Views
public TextView tvServiceType, tvStatus;
public final View mView;
//Initializing Views
public ViewHolderJob(View itemView) {
super(itemView);
mView = itemView;
tvServiceType = (TextView) mView.findViewById(R.id.tvServiceType);
tvStatus = (TextView) mView.findViewById(R.id.tvStatus);
}
}
}
のErrorLog
あなたはJob
を追加する前にrecyclerviewにアダプタを設定している
at com.roaderapp.roaderappdriver.job.JobAdapter.getItemCount(JobAdapter.java:128)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2556)
at android.view.View.measure(View.java:16820)
at android.support.v4.widget.SwipeRefreshLayout.onMeasure(SwipeRefreshLayout.java:600)
この行を次のように変更します。return Job.size(); to(Job == null)が0を返す。 Job.size();を返します。 –