gpt4 book ai didi

Android - RecyclerView NullPointerException getItemCount?

转载 作者:行者123 更新时间:2023-11-29 17:16:19 24 4
gpt4 key购买 nike

我有一个 recyclerView,它让我崩溃:

enter image description here

这是我的开始 Activity :

public class StartActivity extends AppCompatActivity {

TextView txtTest;
private ProgressDialog pDialog;
// These tags will be used to cancel the requests
private String tag_json_obj = "jobj_req", tag_json_arry = "jarray_req";

private RecyclerView.Adapter mAdapter;
RecyclerView UserCode_Recycler;
private LinearLayoutManager mLayoutManager;


List<Marketing_Code> userCodeList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
txtTest = (TextView) findViewById(R.id.txtTest);
UserCode_Recycler = (RecyclerView) findViewById(R.id.UserCode_Recycler);
pDialog = new ProgressDialog(this);
pDialog.setMessage("Loading...");
pDialog.setCancelable(false);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
if (fab != null) {
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}

makeJsonArryReq();

userCodeList = new ArrayList<>();
// create an Object for Adapter
mAdapter = new UserCodeList_Adapter(userCodeList, StartActivity.this);
// set the adapter object to the Recyclerview
UserCode_Recycler.setAdapter(mAdapter);

mAdapter.notifyDataSetChanged();


UserCode_Recycler.setHasFixedSize(true);

mLayoutManager = new LinearLayoutManager(this);
// use a linear layout manager
UserCode_Recycler.setLayoutManager(mLayoutManager);

}

private void showProgressDialog() {
if (!pDialog.isShowing())
pDialog.show();
}

private void hideProgressDialog() {
if (pDialog.isShowing())
pDialog.hide();
}


/**
* Making json array request
*/
private void makeJsonArryReq() {
showProgressDialog();
JsonArrayRequest req = new JsonArrayRequest(Const.Marketing_List,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d("MYData", response.toString());
userCodeList = MarketingCode_JSONParser.parseFeed(response.toString());
/* // create an Object for Adapter
mAdapter = new UserCodeList_Adapter(userCodeList, StartActivity.this);
// set the adapter object to the Recyclerview
Search_Recycler.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
//txtTest.setText(response.toString());*/
mAdapter.notifyDataSetChanged();
hideProgressDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("Custom Log Error", "Error: " + error.getMessage());
hideProgressDialog();
}
});

// Adding request to request queue
AppController.getInstance().addToRequestQueue(req, tag_json_arry);
// Cancelling request
// ApplicationController.getInstance().getRequestQueue().cancelAll(tag_json_arry);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

还有我的适配器:

public class UserCodeList_Adapter extends RecyclerView.Adapter<UserCodeList_Adapter.ViewHolder> {

private List<Marketing_Code> ucList;
public static Activity activity;
public UserCodeList_Adapter(List<Marketing_Code> userCodeList, Activity activity) {
this.ucList = userCodeList;
this.activity = activity;
}
@Override
public UserCodeList_Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.listmarketing_cardview, null);

// create ViewHolder
ViewHolder viewHolder = new ViewHolder(itemLayoutView);
return viewHolder;
}

@Override
public void onBindViewHolder(UserCodeList_Adapter.ViewHolder viewHolder, int position) {
String userCode =String.valueOf(ucList.get(position).getMarketCode());
viewHolder.txtUserID.setText(userCode);
}

@Override
public int getItemCount() {
return ucList.size();
//return ucList == null ? 0 : ucList.size();
}

public static class ViewHolder extends RecyclerView.ViewHolder {

public TextView txtUserID;

public Marketing_Code items;

public ViewHolder(View itemLayoutView) {
super(itemLayoutView);

txtUserID = (TextView) itemLayoutView.findViewById(R.id.txtUserID);
// Onclick event for the row to show the data in toast
itemLayoutView.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
}
});

}

}
}

最佳答案

您还没有初始化您的userCodeList

查看您的代码,您将适配器基于该列表,但尚未初始化。因此,当适配器试图了解您的列表中有多少项时,它会抛出一个 NullPointerException

userCodeList 的声明更改为如下所示:

List<Marketing_Code> userCodeList = new ArrayList<>();

看到您更新的问题,您的数据似乎基于 JSON 响应。如果是这样,那么您当前所做的几乎是正确的。

观察这段经过稍微修改的代码 fragment :

private void makeJsonArryReq() {
showProgressDialog();
JsonArrayRequest req = new JsonArrayRequest(Const.Marketing_List,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d("MYData", response.toString());
/* YOUR OLD CODE -> */ // userCodeList = MarketingCode_JSONParser.parseFeed(response.toString());
/* HOW IT SHOULD'VE BEEN */ userCodeList.addAll(MarketingCode_JSONParser.parseFeed(response.toString()));
mAdapter.notifyDataSetChanged();
hideProgressDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("Custom Log Error", "Error: " + error.getMessage());
hideProgressDialog();
}
});

// ...

查看上面代码段的注释部分。这样做应该可以解决您的问题并使数据在屏幕上可见。

关于Android - RecyclerView NullPointerException getItemCount?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38714629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com