2

这是我的问题的继续:

从我的应用程序的先前活动中获取某些内容时遇到问题。我的情况是,之前的活动,称为 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();
            }

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

4

2 回答 2

3
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
于 2013-01-24T17:47:44.023 回答
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);

在这里,您可以通过这种方式开始下一个类执行,并将值从当前类传递到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);
于 2013-01-24T17:54:05.953 回答