【问题标题】:How can I temporary save data? such as shopping cart in android app如何临时保存数据?比如安卓应用中的购物车
【发布时间】:2016-08-29 12:50:08
【问题描述】:

我是初学者的 android 开发人员。我有一个关于临时保存购物车数据的问题。这是一个定制衬衫应用程序。客人应选择领口、袖口等。 我使用列表视图来显示这些选定的项目和客人选择的选项。

public class Cart_item_list {
private static int cart_itemimage;
private static String cart_itemname;
private static String cart_itemprice;
private static String cart_collar;
private static String cart_cuffs;
private static String cart_placket;
private static String cart_pocket;
private static String cart_fit;
private static String cart_initial;

public static int getCart_itemimage() {
    return cart_itemimage;
}

public static void setCart_itemimage(int cart_itemimage) {
    Cart_item_list.cart_itemimage = cart_itemimage;
}

public static String getCart_itemname() {
    return cart_itemname;
}

public static void setCart_itemname(String cart_itemname) {
    Cart_item_list.cart_itemname = cart_itemname;
}

public static String getCart_itemprice() {
    return cart_itemprice;
}

public static void setCart_itemprice(String cart_itemprice) {
    Cart_item_list.cart_itemprice = cart_itemprice;
}

public static String getCart_collar() {
    return cart_collar;
}

public static void setCart_collar(String cart_collar) {
    Cart_item_list.cart_collar = cart_collar;
}

public static String getCart_cuffs() {
    return cart_cuffs;
}

public static void setCart_cuffs(String cart_cuffs) {
    Cart_item_list.cart_cuffs = cart_cuffs;
}

public static String getCart_placket() {
    return cart_placket;
}

public static void setCart_placket(String cart_placket) {
    Cart_item_list.cart_placket = cart_placket;
}

public static String getCart_pocket() {
    return cart_pocket;
}

public static void setCart_pocket(String cart_pocket) {
    Cart_item_list.cart_pocket = cart_pocket;
}

public static String getCart_fit() {
    return cart_fit;
}

public static void setCart_fit(String cart_fit) {
    Cart_item_list.cart_fit = cart_fit;
}

public static String getCart_initial() {
    return cart_initial;
}

public static void setCart_initial(String cart_initial) {
    Cart_item_list.cart_initial = cart_initial;
}


public Cart_item_list(int cart_itemimage, String cart_itemname, String cart_itemprice, String cart_collar, String cart_cuffs, String cart_placket, String cart_pocket, String cart_fit, String cart_initial) {
    this.cart_itemimage = cart_itemimage;
    this.cart_itemname = cart_itemname;
    this.cart_itemprice = cart_itemprice;
    this.cart_collar = cart_collar;
    this.cart_cuffs = cart_cuffs;
    this.cart_placket = cart_placket;
    this.cart_pocket = cart_pocket;
    this.cart_fit = cart_fit;
    this.cart_initial = cart_initial;

}

}

这是列表视图适配器的项目列表。

package com.example.yeong.shifendingzhi;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class Cart_item_adapter extends BaseAdapter {
Context context;
ArrayList<Cart_item_list> cart_item_listArrayList;


public Cart_item_adapter(Context context, ArrayList<Cart_item_list> cart_item_listArrayList) {
    this.context = context;
    this.cart_item_listArrayList = cart_item_listArrayList;
}


@Override
public int getCount() {
    return cart_item_listArrayList.size();
}

@Override
public Object getItem(int i) {
    return cart_item_listArrayList.get(i);
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    view = LayoutInflater.from(context).inflate(R.layout.cart_listview, null);
    ImageView selected_item_image = (ImageView) view.findViewById(R.id.selected_item_image);
    TextView selected_cart_name = (TextView) view.findViewById(R.id.selected_cart_name);
    TextView selected_cart_cuffs = (TextView) view.findViewById(R.id.selected_cart_cuffs);
    TextView selected_cart_initial = (TextView) view.findViewById(R.id.selected_cart_initial);
    TextView selected_cart_placket = (TextView) view.findViewById(R.id.selected_cart_placket);
    TextView selected_cart_fit = (TextView) view.findViewById(R.id.selected_cart_fit);
    TextView selected_cart_pocket = (TextView) view.findViewById(R.id.selected_cart_pocket);
    TextView selected_cart_price = (TextView) view.findViewById(R.id.selected_cart_price);
    TextView selected_cart_collar = (TextView) view.findViewById(R.id.selected_cart_collar);

    selected_cart_name.setText(cart_item_listArrayList.get(i).getCart_itemname());
    selected_cart_cuffs.setText(cart_item_listArrayList.get(i).getCart_cuffs());
    selected_cart_initial.setText(cart_item_listArrayList.get(i).getCart_initial());
    selected_cart_placket.setText(cart_item_listArrayList.get(i).getCart_placket());
    selected_cart_fit.setText(cart_item_listArrayList.get(i).getCart_fit());
    selected_cart_pocket.setText(cart_item_listArrayList.get(i).getCart_pocket());
    selected_cart_price.setText(cart_item_listArrayList.get(i).getCart_itemprice());
    selected_cart_collar.setText(cart_item_listArrayList.get(i).getCart_collar());
    selected_item_image.setImageResource(cart_item_listArrayList.get(i).getCart_itemimage());
    return view;
}

}

这是列表视图适配器 我尝试创建全局变量arraylist,并剪切了很多,但都失败了,单例,使用应用程序。 你能帮我为列表视图制作全局数组列表吗? 它可以帮助我临时保存数据并在另一个活动中更改数组列表数据。 谢谢。

【问题讨论】:

  • 使用共享偏好
  • @AvinashMishra 好吧,我不想使用共享偏好,我只想知道如何通过使用全局变量来解决这个问题。
  • 我也用过共享偏好
  • 你也可以使用应用类
  • @VivekMishra 请告诉我如何使用应用程序类来存储客户的定制衬衫

标签: android listview arraylist global-variables


【解决方案1】:

我推荐https://github.com/pilgr/Paper的Paper库

它易于配置,无需设置任何 sql 类型的连接,就像在本地写入文本文件一样。 我用过它,它很坚固。 我主要用于在登录活动页面中存储记住我的用户名和密码:

 if(ckbRemember.isChecked())
                {
                    Paper.book().write(Common.USER_KEY,edtUsername.getText().toString());
                    Paper.book().write(Common.PWD_KEY,edtPassword.getText().toString());
                }

当你想随时从任何活动中清除数据时,就像:

Paper.book().destroy();

【讨论】:

    【解决方案2】:

    如果您想将所有这些值存储更长的时间(例如几天或用户关闭您的应用),您可以将这些值存储在shared preferences:

    SharedPreferences spInstance = getSharedPreferences("my_identifier", Context.MODE_PRIVATE);
    SharedPreferences.Editor spEditor = spInstance.edit();
    spEditor.putString("key", "value");
    spEditor.apply(); // Save the data
    //Retrieve the data:
    SharedPreferences spInstance = getSharedPreferences("my_identifier", Context.MODE_PRIVATE);
    SharedPreferences.Editor spEditor = spInstance.edit();
    String myString = spInstance.getString("key", "default-value");
    

    就是这样!

    【讨论】:

      【解决方案3】:

      使用简单的 POJO 类。创建一个存储衬衫属性的 java 类。然后声明一个以该类作为其原始类型的全局数组列表。

      public class Shirt{
          String cuffs;
          String plackets;
          String collars;
          ...
      
      public String getCuff(){...}
      public String getCollar(){...}
      
      public void setCuff(){...}
      public void setCollar(){...}
      }
      
      ArrayList<Shirt> shirts = new ArrayList<>();
      

      现在,如果您希望它持久存在,您必须将其存储在 SharedPreference 或某个数据库中。如果您不想要存储但需要全局上下文类型变量,则可以使用Application 类或静态变量,这取决于您的用例是什么。

      编辑: Application 类的简单example。请记住在您的清单中命名包。

      【讨论】:

      • 我用intent来收集衬衫的属性,我想为购物车存储定制的衬衫数据,而不仅仅是一件衬衫
      • 我认为如果您希望数据库持久存在,您将不得不使用 SharedPreferences 或某些数据库。 @DDerTyp 已经为您提供了代码。来吧,使用它。
      【解决方案4】:

      Android 提供了几个选项来保存持久的应用程序数据。您选择的解决方案取决于您的特定需求,例如数据是否应该是私有的、持久的以及您的数据需要多少空间。看看Developers Guide

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-23
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多