Recyclerview android с залпом JsonArrayRequest с параметрами записи - PullRequest
0 голосов
/ 24 августа 2018

Я хочу загрузить свой переработчик в массив JSON.Я использую залп для этого.

Я использую StringRequest на данный момент.

Я хочу опубликовать идентификатор и в ответ получу массив 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"
}]

Спасибо.

Ответы [ 5 ]

0 голосов
/ 29 августа 2018

Я не знаю, в чем была проблема, я только что создал новый проект только для проверки этого и его работы с некоторыми незначительными изменениями. При отладке списка состояний выдается та же ошибка, но я получил вывод.

Ниже приведен код MAinactivity:

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);
    }
}
0 голосов
/ 28 августа 2018

вы можете использовать jsonschema2pojo Генерация простых старых объектов Java из JSON или JSON-схемы. http://www.jsonschema2pojo.org/

реализация 'com.google.code.gson: gson: 2.6.2' библиотека для аннотаций @ SerializedName

Gson gson = новый Gson ();

Mainleaddata mainleaddata = gson.fromJson (response.toString (), Mainleaddata.class);

0 голосов
/ 28 августа 2018

Вам нужно обновить список вашего адаптера, который у вас уже есть, пустым списком. Когда вы получите ответ от сервера, добавьте список в адаптер.

Добавьте этот метод к адаптеру

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

Этот метод добавляет все данные в список и заполняет их в RecyclerView.

Измените 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");
              }
          }
0 голосов
/ 28 августа 2018
  1. Удалить statusList =new ArrayList<Main_lead_data>(); строку в StringRequest блоке.

  2. Добавить mainleadRecycler_Adpter.notifyDataSetChanged() строку перед progressBar.dismiss(); в StringRequest блоке.

0 голосов
/ 27 августа 2018

попробуйте использовать конструктор invoke адаптера после получения массива и после него установить адаптер. Это будет работать

...