【问题标题】:Use same SQLite database for multiple activities对多个活动使用相同的 SQLite 数据库
【发布时间】:2016-05-14 22:18:35
【问题描述】:

我对 Android 很陌生,正在尝试构建一个食品订购应用程序,我在结帐页面上遇到问题,其中数据库应该接收来自 6 个不同活动的数据,但它只从启动的第一个活动和所有其他活动接收数据失败。有人可以告诉我如何管理它吗?在此先感谢大家

public class BaconBurgerActivity extends Activity
{

    ImageView bacon_burger;
    TextView bacon_burger_txt;
    TextView bacon_burger_price;
    TextView bacon_burger_qty;
    Spinner bacon_burger_spinner;
    Button bb_add_btn;
    Button bb_menu_btn;
    TextView bacon_burger_combo;
    TextView bacon_burger_juices;
    TextView bacon_burger_sides;
    TextView bacon_burger_combo_qty;
    Button bacon_burger_combo_add;
    Spinner bacon_burger_juice_spinner;
    ArrayAdapter<CharSequence> bacon_burger_juice_adapter;
    Spinner bacon_burger_side_spinner;
    ArrayAdapter<CharSequence> bacon_burger_side_adapter;
    Spinner bacon_burger_combo_qty_spinner;
    Context ctx = this;
    SQLiteDatabase db;



@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bacon_burger_layout);
   //Bacon Burger Image and Text View
    bacon_burger=(ImageView)findViewById(R.id.bb_main);
    bacon_burger_txt=(TextView)findViewById(R.id.bb_text);
    bacon_burger_price=(TextView)findViewById(R.id.bb_price);
    bacon_burger_qty=(TextView)findViewById(R.id.bb_qty);
    //Bacon Burger Spinner
    Integer[] options = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    bacon_burger_spinner=(Spinner)findViewById(R.id.bb_spinner);
    ArrayAdapter<Integer> bacon_burger_adapter =new ArrayAdapter<>(this,android.R.layout.simple_spinner_item,options);
    bacon_burger_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    bacon_burger_spinner.setAdapter(bacon_burger_adapter);

    //Bacon Burger Buttons
    bb_add_btn=(Button)findViewById(R.id.bb_add);
    bb_menu_btn=(Button)findViewById(R.id.bb_back);

    //Combo Image and Text View
    bacon_burger_combo=(TextView)findViewById(R.id.bb_combo);
    bacon_burger_juices=(TextView)findViewById(R.id.juices);
    bacon_burger_sides=(TextView)findViewById(R.id.sides);
    bacon_burger_combo_qty=(TextView)findViewById(R.id.bb_combo_qty);
    //Combo Button
    bacon_burger_combo_add=(Button)findViewById(R.id.bb_combo_add);
    //Combo Juice Spinner
    bacon_burger_juice_spinner=(Spinner)findViewById(R.id.bb_juice_spinner);
    bacon_burger_juice_adapter=ArrayAdapter.createFromResource(this,R.array.juices,android.R.layout.simple_spinner_item);
    bacon_burger_juice_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    bacon_burger_juice_spinner.setAdapter(bacon_burger_juice_adapter);
    //Combo Side Spinner
    bacon_burger_side_spinner=(Spinner)findViewById(R.id.bb_side_spinner);
    bacon_burger_side_adapter=ArrayAdapter.createFromResource(this,R.array.sides,android.R.layout.simple_spinner_item);
    bacon_burger_side_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    bacon_burger_side_spinner.setAdapter(bacon_burger_side_adapter);
    //Combo Qty Spinner
    Integer[] numbers = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    bacon_burger_combo_qty_spinner=(Spinner)findViewById(R.id.bb_combo_spinner);
    ArrayAdapter<Integer> bacon_burger_combo_adapter =new ArrayAdapter<>(this,android.R.layout.simple_spinner_item,numbers);
    bacon_burger_combo_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    bacon_burger_combo_qty_spinner.setAdapter(bacon_burger_combo_adapter);


}

//Bacon Burger onClick method
public void add_btn (View view)
{
    int quantity = Integer.parseInt(bacon_burger_spinner.getSelectedItem().toString());
    float price =(float) 6.52;
    float total= ((quantity)*(price));
    String bb_order=bacon_burger_spinner.getSelectedItem().toString()+" Bacon Burger";
    DatabaseOperations DB = new DatabaseOperations(ctx);
    DB.putInformation(DB,bb_order,null,total);
    Toast.makeText(getBaseContext(),"ITEM ADDED TO BASKET", Toast.LENGTH_LONG).show();

}

public void menu_btn (View view)
{
    Intent bb_intent=new Intent(BaconBurgerActivity.this,MainActivity.class);
    startActivity(bb_intent);
}

//Bacon Burger Combo onClick method

public void add_combo_btn (View view)
{
    int combo_quantity= Integer.parseInt(bacon_burger_combo_qty_spinner.getSelectedItem().toString());
    float bb_combo_price=(float)8.55;
    float bb_combo_total= ((combo_quantity)*(bb_combo_price));
    String bb_combo_order=bacon_burger_combo_qty_spinner.getSelectedItem().toString()+" Bacon Burger Combo";
    String bb_juice_side=bacon_burger_side_spinner.getSelectedItem().toString()+bacon_burger_juice_spinner.getSelectedItem().toString();
    DatabaseOperations DB = new DatabaseOperations(ctx);
    DB.putInformation(DB,bb_combo_order,bb_juice_side,bb_combo_total);
    Toast.makeText(getBaseContext(),"ITEM ADDED TO BASKET", Toast.LENGTH_LONG).show();


    }

}

【问题讨论】:

  • 您的活动如何将数据提供给结帐页面?
  • 在其他活动中检查你的连接有两个原因导致查询中止第一个连接问题和第二个错误的SQL语句。创建日志并根据日志错误排序问题。
  • 您应该将这些活动生成的数据保存在静态环境(某种缓冲区)中,因此当您到达结帐活动时,您只需查询此静态上下文即可。基本上你从记忆中获取信息。
  • Shamas S - 我上传了将数据发送到数据库的活动之一的代码,我对所有其他 5 个活动使用了相同的语句,但名称不同
  • 嗨 MarkSkayff,你能解释一下吗?我不知道该怎么做,我没有编程背景,所以有些东西我真的很难理解

标签: android sqlite listview android-activity android-lifecycle


【解决方案1】:

解释@MarkSkayff 所说的:在活动之间传递数据。

当您调用第二个活动时,您可以将 Extras 添加到您的 Intent。例如:

Intent bb_intent=new Intent(BaconBurgerActivity.this,MainActivity.class);
bb_intent.putExtra("total",total);
startActivity(bb_intent);

在你的 MainActivity 的 onCreate 方法上,你可以加载这个 Extra 使用

getIntent().getFloatExtra("total",0f); //0f is the default value, in case the float isn't found.

您可以在此处阅读有关 Intent Extras 的更多信息: How to use putExtra() and getExtra() for string data

然后在 CheckOut Activity 上,将数据发送到数据库。

【讨论】:

  • 非常感谢您的回复,实际上我通过在每次插入数据后关闭数据库来解决它,现在它工作正常。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
  • 2010-09-05
  • 2015-04-15
相关资源
最近更新 更多