RecyclerView中的问题NullPointerException

时间:2017-11-21 11:41:13

标签: android nullpointerexception android-recyclerview

Image我想实现一个代码,其中数据来自服务器并显示在RecyclerView项目上,下面是我的mainActivity类,我从服务器获取数据,但是这个代码因为NullPointerException而没有运行。 我正在使用Volley来获取数据

public class MainActivity_Plan extends AppCompatActivity {
private List<Plan> planList = new ArrayList<>();
private RecyclerView recyclerView;
private PlanAdapter pAdapter;
private RequestQueue requestQueue;
String url;

// Session Manager Class
SessionManager session;
String matri_id;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.plan_activity);
    session = new SessionManager(this);
    HashMap<String, String> user = session.getUserDetails();
    matri_id = user.get(SessionManager.KEY_EMAIL);

    Log.e("matri_id+++++++++++++",matri_id);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    pAdapter = new PlanAdapter(planList);
    RecyclerView.LayoutManager mLayoutManager = new 
    LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(pAdapter);
    getInfo();
    Log.e("url____________",url);
}

 private void getInfo() {
    url = ConfigPlan.DATA_URL+matri_id;

JsonArrayRequest of volley

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    //Calling method parseData to parse the json response
                    Log.e("response---------",response.toString());
                    parseData(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //If an error occurs that means end of the list has reached
                    Toast.makeText(MainActivity_Plan.this, "No More Items Available", Toast.LENGTH_SHORT).show();
                }
            });

    requestQueue.add(jsonArrayRequest);
}

此方法将解析json数据

  private void parseData(JSONArray array) {
    for (int i = 0; i < array.length(); i++) {
        Plan p = new Plan();
        JSONObject json = null;
        try {
            json = array.getJSONObject(i);
            //Adding data to the superhero object
            p.setName(json.getString(ConfigPlan.KEY_PLAN_NAME));
            p.setAmount(json.getString(ConfigPlan.KEY_PLAN_AMOUNT));
            p.setDuration(json.getString(ConfigPlan.KEY_PLAN_DURATION));
            p.setContacts(json.getString(ConfigPlan.KEY_PLAN_CONTACTS));
            } catch (JSONException e) {
            e.printStackTrace();
        }
        //Adding the superhero object to the list
        planList.add(p);
    }
  }
}

以下是适配器类

public class PlanAdapter extends RecyclerView.Adapter<PlanAdapter.MyViewHolder> {

private List<Plan> planList;

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView plan_name, plan_duration, plan_contact, plan_amount;
    public Button subscribeButton;

    public MyViewHolder(View view) {
        super(view);
        plan_name = (TextView) view.findViewById(R.id.planName);
        plan_duration = (TextView)view.findViewById(R.id.planDuration);
        plan_contact = (TextView) view.findViewById(R.id.planContacts);
        plan_amount = (TextView) view.findViewById(R.id.planAmount);
        subscribeButton = (Button) view.findViewById(R.id.subscribeButton);
    }
}

public PlanAdapter(List<Plan> planList) {
    this.planList = planList;
}

@Override
public PlanAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
        .inflate(R.layout.plan_activity_item, parent, false);
    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(PlanAdapter.MyViewHolder holder, int position) {
    Plan plan = planList.get(position);
    holder.plan_name.setText(plan.getName());
    holder.plan_amount.setText(plan.getAmount());
    holder.plan_contact.setText(plan.getContacts());
    holder.plan_duration.setText(plan.getDuration());
  }
  @Override
  public int getItemCount() {
     return 0;
  }
 }

3 个答案:

答案 0 :(得分:1)

我认为您可能没有初始化类requestQueue的{​​{1}}对象(根据您的共享错误图片)。

答案 1 :(得分:0)

完成代码解析后,请更新列表中的适配器。您必须在“OnResponse()”方法中放入“Adapter”代码。解析代码后。

答案 2 :(得分:0)

  • 没有初始化requestQueue类<{1}}的对象

  • 您在RequestQueue pAdapter.notifyDataSetChanged();

  • 中添加数据后忘记了planList
  • 在适配器类中更改此

更改 Arraylist 方法

getItemCount()