将整数答案转发到下一个活动

时间:2016-04-12 02:09:22

标签: android android-studio

我想计算在结果1中花费的金额并将其显示在结果2中。我尝试使用底部写的方法,但它不起作用,因为我不知道要填写什么对于其中一些。请帮我。

public class activityresult1 extends Activity {

ArrayList<DataInfo> itemList, selectedList;

Button buttonorder;
TextView textviewcard;
private static final int REQUEST_CODE = 10;
int[] image ={R.drawable.friednoodle, R.drawable.friedrice, R.drawable.steamfish,R.drawable.tehice};
String[] item = {"Fried Noodle", "Fried Rice", "Steam Fish","Iced Tea"};
String[] description = {"Classic Chinese stir fried noodle with prawn and Pork",
        "Special sauce Fried Rice using indian rice", "HongKong Style Steamed Fish ","HongKong classical iced tea"};
String[] cost={"6","5","25","2"};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_activityresult1);

    Bundle extras = getIntent().getExtras();
    String strcardnumber = extras.getString("Card Number");
    textviewcard = (TextView) findViewById(R.id.textviewcard);
    textviewcard.setText("Welcome, " + strcardnumber + " !" + "\nPlease select the food you want ! : ");

    itemList = new ArrayList<DataInfo>();
    itemList.add(new DataInfo(item[0], image[0], description[0], cost[0]));
    itemList.add(new DataInfo(item[1], image[1], description[1], cost[1]));
    itemList.add(new DataInfo(item[2], image[2], description[2], cost[2]));
    itemList.add(new DataInfo(item[3], image[3], description[3], cost[3]));

    final MenuAdapter adapter = new MenuAdapter(this);

    ListView listView = (ListView)findViewById(R.id.list);
         int sum = 0;
            if (!adapter.getQuantity()[0].equals(""))
            {
                sum = Integer.parseInt(adapter.getQuantity()[0])*Integer.parseInt(cost[0]);
            }
            if (!adapter.getQuantity()[1].equals(""))
            {
                sum = Integer.parseInt(adapter.getQuantity()[1])*Integer.parseInt(cost[1]);
            }
            if (!adapter.getQuantity()[2].equals(""))
            {
                sum = Integer.parseInt(adapter.getQuantity()[2])*Integer.parseInt(cost[2]);
            }
            if (!adapter.getQuantity()[3].equals(""))
            {
                sum = Integer.parseInt(adapter.getQuantity()[3])*Integer.parseInt(cost[3]);
            }

  Intent intent = new Intent(getApplicationContext(), activityresult2.class);
            Bundle bundle = new Bundle();
            bundle.putString("Noodle quantity", adapter.getQuantity()[0]);
            bundle.putString("Rice quantity", adapter.getQuantity()[1]);
            bundle.putString("Fish quantity", adapter.getQuantity()[2]);
            bundle.putString("Iced tea", adapter.getQuantity()[3]);
            bundle.putInt("sum", sum);
            bundle.putBoolean("ANI", adapter.getItem(0).isAddInisCheck());//add noodle ingredients
            bundle.putBoolean("ARI", adapter.getItem(1).isAddInisCheck()); // add rice ingredients
            bundle.putBoolean("AFI", adapter.getItem(2).isAddInisCheck());// add fish ingredients
            bundle.putBoolean("AIT", adapter.getItem(3).isAddInisCheck()); // add ice tea ingredients
            intent.putExtras(bundle);
            startActivityForResult(intent, REQUEST_CODE);
        }
    });
}

public class activityresult2 extends Activity {

static public String txtOrder ="";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_activityresult2);

    Bundle bundle = getIntent().getExtras();
    String strfnq = bundle.getString("Noodle quantity");
    String strfrq = bundle.getString("Rice quantity");
    String strfsq = bundle.getString("Fish quantity");
    String stricq = bundle.getString("Iced tea");
    Integer strsum = bundle.getInt("sum");

    boolean addNingc = bundle.getBoolean("ANI");
    boolean addRingc = bundle.getBoolean("ARI");
    boolean addFingc = bundle.getBoolean("AFI");
    boolean addTingc = bundle.getBoolean("AIT");
    boolean addmoneyc = bundle.getBoolean("AMY");

    Intent mIntent = getIntent();
    int sum = mIntent.getIntExtra("sum",strsum);
    TextView costtext = (TextView)findViewById(R.id.costtext);
    costtext.setText(getIntent().getExtras().getString("sum"));

    TextView foodorders = (TextView) findViewById(R.id.foodordershow);
    foodorders.setText(getIntent().getExtras().getString("Quantity"));

    String addNdlThing = "";
    if (addNingc) { 
        addNdlThing = " with addition of ingredients";
    }

    String addRlThing = "";
    if (addRingc) {
        addRlThing = " with addition of ingredients";
    }

    String addSlThing = "";
    if ( addFingc) {
        addSlThing = " with addition of ingredients";
    }

     String addTeac = "";
    if ( addTingc ) {
        addTeac = " with addition of ingredients";
    }

    foodorders = (TextView) findViewById(R.id.foodordershow);
    if(strfnq.equals("") && strfrq.equals("") && strfsq.equals("")&& stricq.equals("")){
        txtOrder = "Sorry, You've not ordered any thing , please return to previous menu to order";
    }else if (!strfnq.equals("") && !strfrq.equals("") && !strfsq.equals("")&& stricq.equals("")) {
        txtOrder = "Thank you , You've ordered\n" + strfnq + " fried noodle" + addNdlThing +" and\n"+ strfrq
                + " fried rice" + addRlThing +" and\n" + strfsq + " Steam fish " + addSlThing + "and\n" + stricq + " Steam fish " + addTeac;
    } else {
        txtOrder = "Thank you , You've ordered\n";
        if(!strfnq.equals("")){
            txtOrder = txtOrder + strfnq + " fried noodle" + addNdlThing;
        }
        if(!strfrq.equals("")){
            txtOrder = txtOrder + strfrq + " fried rice" + addRlThing;
        }
        if(!strfsq.equals("")){
            txtOrder = txtOrder + strfsq + " Steam fish" + addSlThing;
        }
        if(!stricq.equals("")){
            txtOrder = txtOrder + stricq + " Iced Tea"+ addTeac;
        }
    }
    foodorders.setText(txtOrder);
}

当我运行它时,它给了我这个错误:

_04-13 13:30:10.062 11066-11123/com.example.android.cardemulation W/OpenGLRenderer: Fail to change FontRenderer cache size, it already initialized

04-13 13:30:10.396 11066-11123/com.example.android.cardemulation E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb9a3d780

04-13 13:30:13.196 11066-11123/com.example.android.cardemulation W/OpenGLRenderer: Fail to change FontRenderer cache size, it already initialized

04-13 13:30:13.292 11066-11066/com.example.android.cardemulation W/Bundle: Key sum expected String but value was a java.lang.Integer.  The default value <null> was returned.

04-13 13:30:13.292 11066-11066/com.example.android.cardemulation W/Bundle: Attempt to cast generated internal exception:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at android.os.BaseBundle.getString(BaseBundle.java:923)
at com.example.android.cardemulation.activityresult2.onCreate(activityresult2.java:33)
at android.app.Activity.performCreate(Activity.java:6248)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1125)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2437)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2544)
at android.app.ActivityThread.access$900(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1394)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:168)
at android.app.ActivityThread.main(ActivityThread.java:5845)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
04-13 13:30:13.295 11066-11123/com.example.android.cardemulation W/OpenGLRenderer: Fail to change FontRenderer cache size, it already initialized_

1 个答案:

答案 0 :(得分:2)

根据您的日志,

java.lang.NumberFormatException: Invalid int: "" at 
java.lang.Integer.invalidInt(Integer.java:138) at 
java.lang.Integer.parseInt(Integer.java:358) at 
java.lang.Integer.parseInt(Integer.java:334)

用外行术语告诉你的是,

  • 您在代码中尝试解析的字符串是空字符串“”而不是数字。我们不能这样做,请解决它。

要解决此类问题,您可以通过多种方式实施检查

  • 抓住异常并告诉用户该号码无效
  • 设置默认输入,即使用户未选择任何内容,也会使用默认值

希望这有帮助。

修改

如果我没有记错的话,你的错误概率相当高。

  • 注释掉以后的代码。

    int sum = Integer.parseInt(adapter.getQuantity()[0])*Integer.parseInt(cost[0]) +
                Integer.parseInt(adapter.getQuantity()[1])*Integer.parseInt(cost[1]) +
                Integer.parseInt(adapter.getQuantity()[2])*Integer.parseInt(cost[2]) +
                Integer.parseInt(adapter.getQuantity()[3])*Integer.parseInt(cost[3]);
    
  • 在解析之前打印出每个值,你会发现哪个是错误的

    eg. Log.d("LOG_TAG", "cost0: " + cost[0]);