Recyclerview android with volley JsonArrayRequest with post



我想用JSON数组加载我的回收器视图。我为此使用凌空抽射.

到目前为止,我正在使用StringRequest

我想发布 id,作为响应,我将获得 JSON 数组。

我收到回复,但我的ArrayList显示错误

statuslist ='this' is not available

下面是我的代码。

private ArrayList<Main_lead_data> statusList = new ArrayList<>();
private RecyclerView mainleadRecycler;
private Main_lead_Adpater mainleadRecycler_Adpter;
mainleadRecycler = findViewById(R.id.idRecyclerViewHorizontalList);
mainleadRecycler.addItemDecoration(new DividerItemDecoration(MainActivity.this, LinearLayoutManager.HORIZONTAL));
mainleadRecycler_Adpter = new Main_lead_Adpater(this,statusList);
LinearLayoutManager horizontalLayoutManager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false);
mainleadRecycler.setLayoutManager(horizontalLayoutManager);
mainleadRecycler.setAdapter(mainleadRecycler_Adpter);
public void getLeadStatus(){
final ProgressDialog progressBar = new ProgressDialog(MainActivity.this);
progressBar.setMessage("Loading..");
progressBar.show();
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
StringRequest stringRequest = new StringRequest(Request.Method.POST,leadstatus_url,
new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(!response.isEmpty()){
try {
JSONArray jsonarray=new JSONArray(response);
statusList =new ArrayList<Main_lead_data>();
for(int i=0;i<jsonarray.length();i++)
{
JSONObject jsonobject = jsonarray.getJSONObject(i);
Main_lead_data data=new Main_lead_data();
data.setStatusName((jsonobject.optString("name")));
data.setStatusCount(jsonobject.optString("data"));
data.setStaus_id(jsonobject.optString("sid"));
statusList.add(data);
}
progressBar.dismiss();
} catch (JSONException e) {
progressBar.dismiss();
Toast.makeText(MainActivity.this,"Server Not Responding..Please Try Again",Toast.LENGTH_SHORT).show();
Log.e("catchException",e.toString());
e.printStackTrace();
}
}
else {
progressBar.dismiss();
Toast.makeText(MainActivity.this,"Server Not Responding",Toast.LENGTH_SHORT).show();
Log.e("error","Empty Response");
}
}
},
new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("error",error.toString());
progressBar.dismiss();
Toast.makeText(MainActivity.this,"Server Not Responding",Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("company_id",companyId );
return params;
}
};
requestQueue.add(stringRequest);
}

我还想知道如何在 JsonArrayRequest 方法中传递后参数并获得响应。

下面是适配器类:

public class Main_lead_Adpater extends RecyclerView.Adapter<Main_lead_Adpater.ViewHolder> {
private Context context;
private ArrayList<Main_lead_data> lead_data ;
LinearLayout view_linear;
public Main_lead_Adpater(Context context,ArrayList<Main_lead_data> lead_data) {
this.context = context;
this.lead_data=lead_data;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_lead_item, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
Main_lead_data lead_status = lead_data.get(position);
holder.textCount.setText(lead_status.getStatusCount());
holder.textName.setText(String.valueOf(lead_status.getStatusName()));
holder.textId.setText(String.valueOf(lead_status.getStaus_id()));
view_linear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
@Override
public int getItemCount() {
return lead_data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView textCount, textName, textId;
public ViewHolder(View itemView) {
super(itemView);
textCount = itemView.findViewById(R.id.total_count);
textName = itemView.findViewById(R.id.status_name);
textId = itemView.findViewById(R.id.sid_tv);
view_linear=(LinearLayout)itemView.findViewById(R.id.view_linear);
}
}
}

下面是 JSON 响应:

[
{
"name": "New Enquiry",
"data": "23",
"sid": "1"
},
{
"name": "Interested",
"data": "4",
"sid": "2"
},
{
"name": "Not Interested",
"data": "5",
"sid": "3"
},
{
"name": "Proposal Sent",
"data": "5",
"sid": "4"
},
{
"name": "Ongoing",
"data": "8",
"sid": "6"
},
{
"name": "Converted Client",
"data": "6",
"sid": "7"
},
{
"name": "Lost",
"data": "27",
"sid": "8"
}]

谢谢。

尝试在获取 arraylist 后使用 invoke constructor of adapter,然后设置适配器。那会起作用

您需要使用空列表更新已有的适配器列表。当您从服务器获得响应时,将列表添加到适配器。

将此方法添加到适配器

public void addItems(ArrayList<Main_lead_data> dataList){
lead_data.addAll(dataList); 
notifyDataSetChanged();
}

此方法将添加列表中的所有数据,并将数据填充到回收器视图。

像这样更改onResponse代码:

if(!response.isEmpty()){
try {
JSONArray jsonarray=new JSONArray(response);
// No need to reinitialize statusList here. You already initialize this 
//  statusList = new ArrayList<Main_lead_data>();
for(int i=0;i<jsonarray.length();i++)
{
JSONObject jsonobject = jsonarray.getJSONObject(i);
Main_lead_data data = new Main_lead_data();
data.setStatusName((jsonobject.optString("name")));
data.setStatusCount(jsonobject.optString("data"));
data.setStaus_id(jsonobject.optString("sid"));
statusList.add(data);
}
mainleadRecycler_Adpter.addItems(statusList);
progressBar.dismiss();
} catch (JSONException e) {
progressBar.dismiss();
Toast.makeText(MainActivity.this,"Server Not Responding..Please Try Again",Toast.LENGTH_SHORT).show();
Log.e("catchException",e.toString());
e.printStackTrace();
}
}
else {
progressBar.dismiss();
Toast.makeText(MainActivity.this,"Server Not Responding",Toast.LENGTH_SHORT).show();
Log.e("error","Empty Response");
}
}
  1. 删除StringRequest块中的statusList =new ArrayList<Main_lead_data>();行。

  2. StringRequestprogressBar.dismiss();之前添加mainleadRecycler_Adpter.notifyDataSetChanged()行。

你可以使用 jsonschema2pojo 从JSON或JSON-Schema生成普通的旧Java对象。 http://www.jsonschema2pojo.org/

实现 'com.google.code.gson:gson:2.6.2' 注释库@SerializedName

Gson gson = new Gson((;

Mainleaddatamainleaddata= gson.fromJson(response.toString((,Mainleaddata.class(;

我不知道问题是什么,我刚刚创建了一个新项目,只是为了测试它,它通过一些小的更改工作。调试状态列表时会出现相同的错误,但我得到了输出。

以下是主活动代码:

public class MainActivity extends AppCompatActivity {
private RecyclerView mainleadRecycler;
private Main_lead_Adpater mainleadRecycler_Adpter;
private ArrayList<Main_lead_data> statusList;
String leadstatus_url;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
leadstatus_url="http://xyz";
statusList=new ArrayList<>();
mainleadRecycler = findViewById(R.id.idRecyclerViewHorizontalList);
mainleadRecycler.addItemDecoration(new DividerItemDecoration(MainActivity.this, LinearLayoutManager.HORIZONTAL));
mainleadRecycler_Adpter = new Main_lead_Adpater(this,statusList);
LinearLayoutManager horizontalLayoutManager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false);
mainleadRecycler.setLayoutManager(horizontalLayoutManager);
mainleadRecycler.setAdapter(mainleadRecycler_Adpter);
getLeadStatus();
}

public void getLeadStatus(){
final ProgressDialog progressBar = new ProgressDialog(MainActivity.this);
progressBar.setMessage("Loading..");
progressBar.show();
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
StringRequest stringRequest = new StringRequest(Request.Method.POST,leadstatus_url,
new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(!response.isEmpty()){
try {
JSONArray jsonarray=new JSONArray(response);
for(int i=0;i<jsonarray.length();i++)
{
JSONObject jsonobject = jsonarray.getJSONObject(i);
Main_lead_data data=new Main_lead_data();
data.setStatusName((jsonobject.optString("name")));
data.setStatusCount(jsonobject.optString("data"));
data.setStaus_id(jsonobject.optString("sid"));
statusList.add(data);
}
progressBar.dismiss();
progressBar.dismiss();
} catch (JSONException e) {
progressBar.dismiss();
Toast.makeText(MainActivity.this,"Server Not Responding..Please Try Again",Toast.LENGTH_SHORT).show();
Log.e("catchException",e.toString());
e.printStackTrace();
}
}
else {
progressBar.dismiss();
Toast.makeText(MainActivity.this,"Server Not Responding",Toast.LENGTH_SHORT).show();
Log.e("error","Empty Response");
}
}
},
new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("error",error.toString());
progressBar.dismiss();
Toast.makeText(MainActivity.this,"Server Not Responding",Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("company_id","2" );
return params;
}
};
requestQueue.add(stringRequest);
}
}

最新更新