ANDROID从以前的活动中获取数据

时间:2013-01-24 17:32:22

标签: android

这是我的问题的继续:

我在从我的应用程序的上一个活动中获取内容时遇到问题。我的情况是,以前的活动,称为ListOfMeals,它有一个列表视图(早餐,早餐小吃等)如果我点击早餐并添加膳食,我点击列表的食物,如面包,水果,蔬菜,之后,它应该添加到我的数据库中。但到目前为止,我有这个,请参考下文:

case R.id.btFoodVegetableSave:
        String mealname = selected;

        String serving = calories.getText().toString();
        int i = Integer.parseInt(serving.replaceAll("[\\D]", ""));

        String servng = String.valueOf(i);

        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
        String strDate = sdf.format(new Date());

        if ( ( mealname.isEmpty() || servng.isEmpty() ) ){

            // call for custom toast
            viewErrorToast();
        }

        else {

        boolean didItWork = true;

        try{

            BreakFastLog entry = new BreakFastLog(Baguettes_Bagels.this);
            entry.open();   
            entry.createEntry(mealname, servng, strDate);
            entry.close();

            }
            catch(Exception e){
                didItWork = false;
                viewErrorToast();
            }finally{
                if (didItWork){
                    viewBMRSavedToast();
                }

            }
        } // end of if else statement
        break;

我的应用程序结构如下:

活动A - 用餐清单(listview =早餐,早餐小吃等)
活动B-从活动A(例如,早晨小吃)中选择,其中有一个按钮以添加更多食物
活动C - 膳食类别清单(再次列表视图:面包,面食等)
活动D - 从活动C中选择(再次列表视图:让我们假设用户选择面包)
活动E-面包清单(再次列出清单视图)
活动F - 从活动E中选择 - (用户现在选择例如白面包)

活动F有一个保存按钮,现在用户根据我的例子,选择了早餐小吃,活动f的数据应该保存到早餐小吃表中。我怎么能这样做?

在我的例子中,它只保存到我的早餐。但是当我选择早餐而不是早餐时,问题就会出现。如何获取用户从之前的活动中选择的内容并将其保存到各自的餐厅?

我知道这与此有关:

BreakFastLog entry = new BreakFastLog(Baguettes_Bagels.this);
        entry.open();   
        entry.createEntry(mealname, servng, strDate);
        entry.close();

我必须把if else语句,但我想不出一些聪明的方法来实现它。感谢您的帮助。

注意:

我试过这样做:

 Bundle extras = getIntent().getExtras();

            String breakfast = this.getIntent().getStringExtra("key_breakfast");
            String ms = this.getIntent().getStringExtra("key_morningsnack");
            String lunch = this.getIntent().getStringExtra("key_lunch");
            String as = this.getIntent().getStringExtra("key_afternoonsnack");
            String dinner = this.getIntent().getStringExtra("key_dinner");
            String es = this.getIntent().getStringExtra("key_eveningsnack");



            if( extras.equals(breakfast)){
                BreakFastLog entry = new BreakFastLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }
            else if( extras.equals(ms) ){ 
                MorningSnackLog entry = new MorningSnackLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }
            else if( extras.equals(lunch) ){
                LunchLog entry = new LunchLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }
            else if( extras.equals(as) ){
                AfternoonSnackLog entry = new AfternoonSnackLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }
            else if( extras.equals(dinner) ){
                DinnerLog entry = new DinnerLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }
            else if( extras.equals(es) ){
                EveningSnackLog entry = new EveningSnackLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }

无济于事。当我运行它并单击保存按钮时,它会被我的异常处理程序捕获。

2 个答案:

答案 0 :(得分:2)

if( extras.equals(breakfast))

永远不会回归真实。在这种情况下,您正在将包与字符串进行比较。您设置捆绑包的方式也存在一些问题。您的捆绑包实际上只需要一个属性,即膳食类型(下面的KEY_MEAL)。尝试这样的事情......

public static final String MEAL_BREAKFAST = "breakfast";
public static final String MEAL_MORNING_SNACK = "morning_snack";
public static final String MEAL_LUNCH = "lunch";
public static final String KEY_MEAL = "meal";

Bundle bundle1 = new Bundle();
bundle1.putString(KEY_MEAL, MEAL_MORNING_SNACK); //change "MEAL_MORNING_SNACK" to whatever meal type was clicked

Intent i = new Intent();
i.putExtras(bundle1);
startActivity(i);

并在下一个活动中......

Bundle bundle2 = getIntent().getExtras();
if(bundle2.getString(KEY_MEAL).equals(MEAL_BREAKFAST))
    // meal is breakfast
else if(bundle2.getString(KEY_MEAL).equals(MEAL_MORNING_SNACK))
    // meal is morning snack
else if(bundle2.getString(KEY_MEAL).equals(MEAL_LUNCH))
    // meal is lunch

答案 1 :(得分:0)

我们可以通过intent将变量和值从一个类传递到另一个类。 我在酒店项目中使用的示例代码如下。希望它会帮助你

Intent in = new Intent(getApplicationContext(), goal.class);
in.putExtra("h_id", h_id);
in.putExtra("lat1", lat1);
in.putExtra("lon1", lon1);
startActivity(in);

通过这种方式,您可以使用intent开始下一个类执行,并使用goal class

将值从当前类传递到in.putExtras("varible_name in new class, value ")

并在新课程目标中使用

Intent in = getIntent();
        h_id = in.getStringExtra("h_id");
        lat1 = in.getDoubleExtra("lat1", 0);
        lon1 = in.getDoubleExtra("lon1", 0);