Получение 20 записей одновременно из json (остальные API) с помощью залпа через утилита - PullRequest
0 голосов
/ 11 февраля 2020

Я хочу загружать 20 записей одновременно, а затем следующие 20 в виде переработчика и т. Д. Через залп, у меня около 100 тыс. Элементов в поиске, я много раз искал его, но не могу найти решение для залпа, все находятся в модификации. publi c класс SearchActivity расширяет AppCompatActivity {

private static final String TAG = MainActivity.class.getName();
private Button btnRequest;
Boolean isScrolling = false;
String name, mf_pnum, availability, image;

LinearLayoutManager manager;

private RequestQueue mRequestQueue;
private StringRequest mStringRequest;
private String url = "this is my url";

int currentItems, totalItems, scrollOutItems;
 ProgressBar simpleProgressBar;

RecyclerView list;

ArrayList<SearchModel> items = new ArrayList<>();
SearchItemAdapter adapter;

SearchView searchView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);


    btnRequest = (Button) findViewById(R.id.click_button);
    list = findViewById(R.id.list);

    searchView = findViewById(R.id.search_view);

    //final ProgressBar simpleProgressBar = new ProgressBar(this);
    manager = new LinearLayoutManager(this);
    manager.setOrientation(RecyclerView.VERTICAL);
    list.setLayoutManager(manager);

    adapter = new SearchItemAdapter(items);
    list.setAdapter(adapter);


    btnRequest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //   simpleProgressBar.setVisibility(View.VISIBLE);


            sendAndRequestResponse();
        }
    });

}


private void sendAndRequestResponse() {

    items.clear();
    final String search = searchView.getQuery().toString();

    url = "this is my url" + "terms=" + search + "&" + "search_by=keyword";


    final ProgressBar simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);

    //RequestQueue initialized
    mRequestQueue = Volley.newRequestQueue(this);


    //String Request initialized
    mStringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            try {
                JSONObject result = new JSONObject(response);

                JSONArray products = result.getJSONArray("products");

                for (int i = 0; i < products.length(); i++) {

                    JSONObject p = products.getJSONObject(i);

                    // JSONObject _source = p.getJSONObject("_source");

                    name = p.getString("name");
                    mf_pnum = p.getString("mf_pnum");
                    availability = p.getString("availability");


                    //String quantity = p.getJSONObject("quantity_all").getString("dk");

                    image = p.getString("images");

                    // JSONArray imagedk = images_all.getJSONArray("dk");

                    //String image = imagedk.getJSONObject(0).getString("original");
                   /* JSONArray prices = _source.getJSONObject("pricing_all").getJSONObject("dk").getJSONArray("ranges");
                    HashMap<String,String> price = new HashMap<>();

                    for(int j=0; j<prices.length(); j++){
                        JSONObject ob= prices.getJSONObject(j);
                        price.put(ob.getString("from"),ob.getString("price"));
                    }
                    // items.add(new SearchModel(name,image,mf_pnum,availability));



                    list.addOnScrollListener(new RecyclerView.OnScrollListener() {
                        @Override
                        public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                            super.onScrollStateChanged(recyclerView, newState);
                            if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {


                                isScrolling = true;
                            }

                        }

                        @Override
                        public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                            super.onScrolled(recyclerView, dx, dy);

                            currentItems = manager.getChildCount();
                            totalItems = manager.getItemCount();
                            scrollOutItems = manager.findFirstVisibleItemPosition();

                            if (isScrolling && (currentItems + scrollOutItems == totalItems)) {
                                isScrolling = false;
                                fechData();
                            }

                        }
                    });



                    items.add(new SearchModel(name, image, mf_pnum, availability));
                    adapter.notifyDataSetChanged();
                    simpleProgressBar.setVisibility(View.GONE);
                }



                 products = result.getJSONObject("content").getJSONArray("products");

                for(int i=0; i<products.length(); i++){

                    JSONObject p = products.getJSONObject(i);

                    JSONObject _source = p.getJSONObject("_source");

                    String name = _source.getString("pnum");
                    String mf_pnum  = _source.getString("mf_pnum");
                    String quantity = _source.getJSONObject("quantity_all").getString("dk");

                    JSONObject images_all = _source.getJSONObject("images_all");
                    JSONArray imagedk = images_all.getJSONArray("dk");

                    String image = imagedk.getJSONObject(0).getString("original");
                    JSONArray prices = _source.getJSONObject("pricing_all").getJSONObject("dk").getJSONArray("ranges");
                    HashMap<String,String> price = new HashMap<>();

                    for(int j=0; j<prices.length(); j++){
                        JSONObject ob= prices.getJSONObject(j);
                        price.put(ob.getString("from"),ob.getString("price"));
                    }
                    items.add(new SearchModel(name,image,quantity,name,price));
                }



            } catch (Exception e) {
                Toast.makeText(SearchActivity.this, e.toString(), Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }


        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            Log.i(TAG, "Error :" + error.toString());
            simpleProgressBar.setVisibility(View.GONE);
        }
    });

    mRequestQueue.add(mStringRequest);
    simpleProgressBar.setVisibility(View.VISIBLE);


}


private void fechData() {

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {

            for (int i = 0; i < 5; i++) {

                items.add(new SearchModel(name, image, mf_pnum, availability));
                adapter.notifyDataSetChanged();

            }

        }
    }, 5000);

}

} `

, и это мой адаптер

publi c класс SearchItemAdapter расширяет RecyclerView.Adapter {

ArrayList<SearchModel> items;

public SearchItemAdapter(ArrayList<SearchModel> items) {
    this.items = items;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View view = inflater.inflate(R.layout.search_item,parent,false);


    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    SearchModel item = items.get(position);
    holder.txt_name.setText(item.getName());
    holder.manufacture_number.setText(item.getManufacture_no());
    holder.txt_avail.setText(item.getAvailability());
    /*
    HashMap<String ,String> price  = item.getPrice();
    for(Map.Entry<String, String> entry : price.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();
        holder.txt_price.setText(holder.txt_price.getText().toString()+"\n"+key+"  "+value);

        // do what you have to do here
        // In your case, another loop.
    }

* / Picasso.get (). Load (item.getImage_url ()). Into (holder.img);

}

@Override
public int getItemCount() {
    return items.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{

    TextView txt_name,manufacture_number,txt_avail;//txt_price
    ImageView img;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        txt_name = itemView.findViewById(R.id.txt_name);
        txt_avail = itemView.findViewById(R.id.txt_avail);
        manufacture_number = itemView.findViewById(R.id.manufacture_number);
        //txt_price = itemView.findViewById(R.id.txt_price);
        img = itemView.findViewById(R.id.img);

    }
}

}

...