2016-04-07 12 views
0

私は自分のアクティビティに対してリサイクラビューを実装したいが、リターンサイズでは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) 
+0

この行を次のように変更します。return Job.size(); to(Job == null)が0を返す。 Job.size();を返します。 –

答えて

0

recyclerView.setAdapter(adapter); 


if (savedInstanceState != null) { 
    Logging.m("TabActive: Job is empty"); 
} else { 
     parseResponse(); 
} 
//update adapter to containing the retrieved job 
adapter.setJob(listJob); 

私はそれを周りに切り替えると思いますが、あなたの問題を解決します

adapter.setJob(listJob); 
recyclerView.setAdapter(adapter); 


if (savedInstanceState != null) { 
    Logging.m("TabActive: Job is empty"); 
} else { 
     parseResponse(); 
} 
//update adapter to containing the retrieved job 

はまた、与えることは現実的ではないことに注意してくださいあなたの変数(この場合はJob)はあなたのクラス定義とまったく同じです。簡単にエラーにつながる可能性があります。リストを次のように定義する方が良いでしょう。List<Job> job;

+0

私はすでに(android.support.v7.widget.RecyclerView.onMeasureで、あなたの方法はまだ失敗したcom.roaderapp.roaderappdriver.job.JobAdapter.getItemCountで java.lang.NullPointerExceptionが (JobAdapter.java:131) を実装しますRecyclerView.java:2556) android.view.View.measure(View.java:16820) – Nizzam

+0

'listJob'はどこで初期化しますか? – 0xDEADC0DE

+0

あなたはまだ 'listJob'を初期化しません。 'listJob = new ArrayList ();'のようなものが必要です – 0xDEADC0DE

関連する問題