英文:
List is returning item after deleting all the items
问题
public class CartAdapter extends RecyclerView.Adapter<CartAdapter.Viewholder> {
// ... (code for other parts of the adapter)
@NonNull
@Override
public Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cart_layout_item, parent, false);
return new Viewholder(view);
}
@Override
public void onBindViewHolder(@NonNull final Viewholder holder, final int position) {
// ... (code for binding data to the ViewHolder)
holder.btn_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// ... (code for deleting items from the cart)
}
});
holder.btn_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// ... (code for updating cart items)
}
});
holder.adapter_livestock.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ... (code for handling livestock click)
}
});
}
@Override
public int getItemCount() {
return cartModelList.size();
}
class Viewholder extends RecyclerView.ViewHolder {
// ... (ViewHolder constructor and other view references)
public Viewholder(@NonNull View itemView) {
super(itemView);
// ... (initialize views)
}
private void setItemDetails(String namee, String manufacturere, String availabilitye, String e_parte,
String m_parte, String floatprice, String int_quantity, String float_line_total) {
// ... (set item details to views)
}
}
}
public class CartActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
// ... (other member variables)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
// ... (initialize views and other variables)
ArrayAdapter<String> customSpinnerAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, names);
cart_country.setOnItemSelectedListener(this);
cart_country.setAdapter(customSpinnerAdapter);
// ... (code for setting up RecyclerView and calculating total)
check_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ... (code for handling checkout button click)
}
});
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// ... (code for handling spinner item selection)
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// ... (code for handling nothing selected)
}
private void sendAndRequestResponse() {
// ... (code for making network request)
}
private void totalCounter() {
// ... (code for calculating and displaying total)
}
}
Please note that I've removed the code inside the onClick
listeners and other parts for brevity, but you should keep the actual functionality intact when implementing this in your project. Make sure to replace the placeholders like // ... (code for ...)
with the actual code that you had there.
英文:
My List is returning an item after clearing all the items by deleting ,On app fresh install its returing null which is good but after adding item and then by deleting all, this happens when go back from that activity and come again, list.size() is returning 1 and an item is remaing ,i don't know if it is loading from cache object instance here is my code of adapter class
public static double p = 0;
private List<CartModel> cartModelList;
Database db;
Context context;
public CartAdapter(Context context, List<CartModel> cartModelList) {
this.cartModelList = cartModelList;
this.context = context;
db = new Database(context);
}
@NonNull
@Override
public Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cart_layout_item, parent, false);
return new Viewholder(view);
}
@Override
public void onBindViewHolder(@NonNull final Viewholder holder, final int position) {
String namee = cartModelList.get(position).getName();
String manufacturere = cartModelList.get(position).getManufacturer();
String availabilitye = cartModelList.get(position).getAvailability();
String e_parte = cartModelList.get(position).getE_part();
String m_parte = cartModelList.get(position).getM_part();
String floatprice = cartModelList.get(position).getUnit_();
String int_quantity = cartModelList.get(position).getQuantity();
String float_line_total = cartModelList.get(position).getLine_total();
holder.setItemDetails(namee, manufacturere, availabilitye, e_parte, m_parte, floatprice, int_quantity, float_line_total);
int checker = SharedPrefManager.getInstance(context).cartcount().getCounter();
if (checker <= 0){
cartModelList.clear();
}
holder.btn_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (db.deleteProduct(cartModelList.get(position).getID())) {
if (cartModelList.size() == 1){
cartModelList.clear();
}else {
cartModelList.remove(position);
notifyDataSetChanged();
}
Toast.makeText(context, "Product deleted from cart", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "Product not deleted from cart", Toast.LENGTH_LONG).show();
}
CartList user111 = new CartList(--COUNTER_BADGE);
// Toast.makeText(context, "else", Toast.LENGTH_SHORT).show();
SharedPrefManager.getInstance(context).cartList(user111);
((Activity)context).invalidateOptionsMenu();
((Activity)context).finish();
Intent intent = new Intent(context, CartActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(intent);
}
});
holder.btn_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String q = holder.quantity.getText().toString();
if(q.isEmpty()){
holder.quantity.setError("Required Field");
holder.quantity.requestFocus();
}else {
double q2 = Double.parseDouble(q);
int avail = Integer.parseInt( cartModelList.get(position).getAvailability());
int qty = Integer.parseInt(q);
if (qty > avail ){
Toast toast= Toast.makeText( (context),
"Quantity must be less than the products Available", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.show();
} else{
Toast.makeText(context, ""+cartModelList.get(position).getManufacturer(), Toast.LENGTH_SHORT).show();
String url = BASE_URL+"api/product/single_product?pnum="+cartModelList.get(position).getE_part();
RequestQueue mRequestQueue = Volley.newRequestQueue(context);
//String Request initialized
StringRequest mStringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject result = new JSONObject(response);
JSONObject products = result.getJSONObject("single_product");
final JSONArray Price = products.getJSONArray("price_range");
for (int i = 0; i < Price.length(); i++) {
JSONObject attributes = null;
try {
attributes = Price.getJSONObject(i);
try {
int a = Math.abs(Integer.parseInt(attributes.getString("to")));
int b = Integer.parseInt(attributes.getString("from"));
if (qty >= b ) {
p = Double.parseDouble(attributes.getString("price"));
String pricee = String.valueOf(p);
holder.price.setText("£"+pricee);
double linetotal6 = qty * p;
DecimalFormat df2 = new DecimalFormat("#.##");
String roundoff = df2.format(linetotal6);
holder.linetotal.setText("£"+roundoff);
}
} catch (NumberFormatException nfe) {
// Toast.makeText(ProductDescription.this, "Not a number", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
Log.d(TAG, "onResponse: "+e);
}
holder.progressbar.setVisibility(View.GONE);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i(TAG, "Error :" + error.toString());
holder.progressbar.setVisibility(View.GONE);
}
}) {
@Override
public String getBodyContentType() {
return "application/json";
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", BASE_Token);
return headers;
}
};
mStringRequest.setRetryPolicy(new DefaultRetryPolicy(
90000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
mRequestQueue.add(mStringRequest);
holder.progressbar.setVisibility(View.VISIBLE);
ContentValues values = new ContentValues();
values.put(Database.Quantity,q);
values.put(Database.Line_total,q2 * p);
values.put(Database.Unit_price, p);
if(db.updateProduct(cartModelList.get(position).getID(),values)){
Toast.makeText(context, "Product updated cart", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "Product not updated from cart", Toast.LENGTH_LONG).show();
}
((Activity)context).finish();
Intent intent = new Intent(context, CartActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(intent);
}
}
}
});
holder.adapter_livestock.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = BASE_URL+"api/product/check_availability?data_id="+cartModelList.get(position).getE_part();//+forgot_code;
RequestQueue requestQueue = Volley.newRequestQueue(context);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
//converting response to json object
JSONObject obj = new JSONObject(response);
String status = obj.getString("status");
if (status.equals("ERROR")) {
Toast.makeText(context, status+""+obj, Toast.LENGTH_LONG).show();
} else {
String livechecker = obj.getString("total_stock");
/* // cart_value.setText(livechecker + " \nIn stock");
cartModelList.get(position).getAvailability();*/
holder.availability.setText(livechecker);
}
} catch (JSONException e) {
e.printStackTrace();
}
holder.progressbar.setVisibility(View.GONE);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("VOLLEY", error.toString());
holder.progressbar.setVisibility(View.GONE);
}
}) {
//This is for Headers If You Needed
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Authorization", BASE_Token);
params.put("Content-Type", "application/json; charset=UTF-8");
return params;
}
};
requestQueue.add(stringRequest);
holder.progressbar.setVisibility(View.VISIBLE);
}
});
}
@Override
public int getItemCount() {
return cartModelList.size();
}
class Viewholder extends RecyclerView.ViewHolder {
private TextView name;
private TextView manufacturer;
private TextView availability;
private TextView e_part;
private TextView m_part;
private TextView price;
private EditText quantity;
private TextView linetotal;
private Button btn_delete;
private Button btn_update;
private Button adapter_livestock;
public SpinKitView progressbar;
public Viewholder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
manufacturer = itemView.findViewById(R.id.manufacturer);
availability = itemView.findViewById(R.id.availability);
e_part = itemView.findViewById(R.id.e_part);
m_part = itemView.findViewById(R.id.m_part);
price = itemView.findViewById(R.id.price);
quantity = itemView.findViewById(R.id.quantity);
linetotal = itemView.findViewById(R.id.linetotal);
btn_delete = itemView.findViewById(R.id.btn_delete);
btn_update = itemView.findViewById(R.id.btn_update);
adapter_livestock = itemView.findViewById(R.id.adapter_livestock);
progressbar = itemView.findViewById(R.id.adapterrprogresslivestockprogress);
}
private void setItemDetails(String namee, String manufacturere, String availabilitye, String e_parte, String m_parte, String floatprice, String int_quantity, String float_line_total) {
name.setText(namee);
manufacturer.setText(manufacturere);
availability.setText(availabilitye);
e_part.setText(e_parte);
m_part.setText(m_parte);
price.setText("£"+floatprice);
quantity.setText(int_quantity);
linetotal.setText("£"+float_line_total);
}
}
}
this is my cart activity
Database db;
TextView subtotal, total;
private double mSubTotal = 0;
Button check_button;
Spinner cart_country;
String countryitemidsss;
String itemcountriesss;
ArrayList<String> names = new ArrayList<>();
ArrayList<String> ids = new ArrayList<>();
SpinKitView cartProgressBar;
TextView cart_shipping1, cart_vat1;
String cart_shipping11, cart_vat11;
double myshiping = 0;
double myvat = 0;
private RequestQueue mRequestQueue;
private StringRequest mStringRequest;
public static String subtoalvalue;
public static final String EXTRA_SUBTOTAL = "subtotal";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout contentFrameLayout = findViewById(R.id.nav_host_fragment); //Remember this is the FrameLayout area within your activity_main.xml
getLayoutInflater().inflate(R.layout.activity_cart, contentFrameLayout);
subtotal = findViewById(R.id.subtotal);
total = findViewById(R.id.total);
check_button = findViewById(R.id.checkout_securely);
cart_country = findViewById(R.id.cart_country);
cartProgressBar = findViewById(R.id.cartProgressBar);
cart_shipping1 = findViewById(R.id.cart_shiping);
cart_vat1 = findViewById(R.id.cart_vat);
db = new Database(this);
ArrayAdapter<String> customSpinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);
cart_country.setOnItemSelectedListener(this);
cart_country.setAdapter(customSpinnerAdapter);
db = new Database(this);
recyclerView = findViewById(R.id.cart_recycler);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(RecyclerView.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
List<CartModel> cartModelList = new ArrayList<>();
cartModelList = db.getCarts();
for (int i = 0; i < cartModelList.size(); i++) {
for (int j = i + 1; j < cartModelList.size(); j++) {
if (cartModelList.get(i).getE_part().equals(cartModelList.get(j).getE_part())) {
cartModelList.get(i).setM_part(cartModelList.get(j).getM_part());
cartModelList.get(i).setName(cartModelList.get(j).getName());
cartModelList.get(i).setQuantity(cartModelList.get(i).getQuantity());
cartModelList.remove(j);
j--;
Log.d("remove", String.valueOf(cartModelList.size()));
}
}
}
for (int i = 0; i < cartModelList.size(); i++) {
mSubTotal = mSubTotal + Double.parseDouble(cartModelList.get(i).getLine_total());
}
int counter33 = SharedPrefManager.getInstance(this).cartcount().getCounter();
if(counter33 <= 0){
LinearLayout caritemTrue = findViewById(R.id.cartItemTrue);
caritemTrue.setVisibility(View.GONE);
}
else
{
LinearLayout cartitemempty = findViewById(R.id.cartItemEmpty);
cartitemempty.setVisibility(View.GONE);
}
subtoalvalue = String.format("%.2f", mSubTotal);
// Toast.makeText(this, subtoalvalue, Toast.LENGTH_SHORT).show();
subtotal.setText("£"+subtoalvalue);
// mSubTotal = mSubTotal;
total.setText(String.valueOf(mSubTotal));
CartAdapter cartAdapter = new CartAdapter(this, cartModelList);
recyclerView.setAdapter(cartAdapter);
check_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (SharedPrefManager.getInstance(getApplicationContext()).isLoggedIn()) {
Intent intent3 = new Intent(getApplicationContext(), Checkout.class);
intent3.putExtra(EXTRA_SUBTOTAL, subtoalvalue);
startActivity(intent3);
} else {
Intent intent = new Intent(getApplicationContext(), CheckOutRegistration.class);
startActivity(intent);
}
}
});
if (cartModelList.size() == 0) {
db.cleanCart();
}
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// On selecting a spinner item
countryitemidsss = ids.get(cart_country.getSelectedItemPosition());
// Toast.makeText(getApplicationContext(), ids.get(spinner.getSelectedItemPosition()), Toast.LENGTH_LONG).show();
itemcountriesss = parent.getItemAtPosition(position).toString();
sendAndRequestResponse();
//Toast.makeText(getApplicationContext(), itemcountries, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
private void sendAndRequestResponse() {
String url = BASE_URL+"api/customers/getvat?user_id=693&login=0&country=" + countryitemidsss + "&buying_as_company=1";
//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);
String status = result.getString("status");
JSONObject businessObject = result.getJSONObject("data");
cart_shipping11 = businessObject.getString("vat");
cart_vat11 = businessObject.getString("shipping_charges");
shippping = data.getString("shipping_charges");
vaaat = data.getString("vat");*/
cart_shipping1.setText("£"+cart_shipping11);
cart_vat1.setText("£"+cart_vat11);
myshiping = Double.parseDouble(cart_shipping11);
myvat = Double.parseDouble(cart_vat11);
totalCounter();
// Toast.makeText(CartActivity.this,""+ myshiping+myvat, Toast.LENGTH_SHORT).show();
try {
myshiping = Float.parseFloat(cart_shipping11);
myvat = Float.parseFloat(cart_vat11);
} catch(NumberFormatException nfe) {
Toast.makeText(CartActivity.this, "Could not parse " + nfe, Toast.LENGTH_SHORT).show();
}*/
cartProgressBar.setVisibility(View.GONE);
} catch (Exception e) {
Toast.makeText(CartActivity.this, e.toString(), Toast.LENGTH_LONG).show();
cartProgressBar.setVisibility(View.GONE);
e.printStackTrace();
}
// spinner.setAdapter(new ArrayAdapter<String>(Checkout.this, android.R.layout.simple_spinner_dropdown_item, countries));
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
cartProgressBar.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), "" + error, Toast.LENGTH_SHORT).show();
}
}) {
@Override
public String getBodyContentType() {
return "application/json";
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", BASE_Token);
return headers;
}
};
mStringRequest.setRetryPolicy(new DefaultRetryPolicy(
90000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
mRequestQueue.add(mStringRequest);
// progressDialog.show();
// mRequestQueue.add(mStringRequest);
cartProgressBar.setVisibility(View.VISIBLE);
}
private void totalCounter() {
String total23 = String.valueOf(mSubTotal + myshiping + myvat);
double fulltotal = Double.parseDouble(total23);
DecimalFormat df2 = new DecimalFormat("#.##");
String roundoff = df2.format(fulltotal);
total.setText("£"+roundoff);
}
专注分享java语言的经验与见解,让所有开发者获益!
评论