【问题标题】:multipling two edit text [duplicate]将两个编辑文本相乘
【发布时间】:2014-07-15 12:54:16
【问题描述】:

我正在尝试将两个 EditText(editHours 和 editWage)相乘,并在 TextView(总)中显示结果,非常感谢任何帮助

public class PayrollActivity extends Activity implements OnClickListener {

 TextView gross, net, calculated;
 EditText editHours, editWage;
 int hours, wage, intGross, intNet, pay;

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


     gross = (TextView) findViewById(R.id.gross);
     hours= Integer.parseInt(editHours.getText().toString());
     wage = Integer.parseInt(editWage.getText().toString());
     gross.setText(hours*wage);
     net = (TextView) findViewById(R.id.net);
     calculated = (TextView) findViewById(R.id.calculated);

        ((Button) findViewById(R.id.addButton)).setOnClickListener(new     OnClickListener() {
         @Override
         public void onClick(View v) {
             // TODO Auto-generated method stub
             StringBuilder str = new StringBuilder("It worked");
             calculated.setText(str);
         }
     });    
    }

应用程序崩溃了

hours= Integer.parseInt(editHours.getText().toString());

LogCat

05-26 14:08:36.591: E/AndroidRuntime(1659): FATAL EXCEPTION: main
05-26 14:08:36.591: E/AndroidRuntime(1659): Process: co.mytms.payroll, PID: 1659
05-26 14:08:36.591: E/AndroidRuntime(1659): java.lang.RuntimeException: Unable to start activity ComponentInfo{co.mytms.payroll/co.mytms.payroll.PayrollActivity}: java.lang.NullPointerException
05-26 14:08:36.591: E/AndroidRuntime(1659):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at android.os.Handler.dispatchMessage(Handler.java:102)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at android.os.Looper.loop(Looper.java:136)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at android.app.ActivityThread.main(ActivityThread.java:5017)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at java.lang.reflect.Method.invokeNative(Native Method)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at java.lang.reflect.Method.invoke(Method.java:515)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at dalvik.system.NativeStart.main(Native Method)
05-26 14:08:36.591: E/AndroidRuntime(1659): Caused by: java.lang.NullPointerException
05-26 14:08:36.591: E/AndroidRuntime(1659):     at co.mytms.payroll.PayrollActivity.onCreate(PayrollActivity.java:22)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at android.app.Activity.performCreate(Activity.java:5231)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
05-26 14:08:36.591: E/AndroidRuntime(1659):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
05-26 14:08:36.591: E/AndroidRuntime(1659):     ... 11 more

【问题讨论】:

  • 你有什么问题?
  • 我的应用程序在'code'小时崩溃= Integer.parseInt(editHours.getText().toString()); '代码
  • '崩溃'。堆栈跟踪?
  • 第一件事。你在edittext inputType中提供了inputtype吗?将其用作预防措施。异常名称是什么?

标签: java android


【解决方案1】:

有几个问题。

首先,当在onCreate 中的EditTexts 上调用getText() 方法时,它们仍然是空的(未初始化请参阅@Manishika answer)。所以Integer.parseInt 会尝试解析一个空的String。将此移动到按钮的onClick 方法中,这是您想要的行为(即,当您单击它时,它将EditText 的两个值相乘并将结果设置为TextView)。

其次,在执行gross.setText(hours*wage); 时,您将调用以int 作为参数的setText 方法。 Android 系统将尝试加载适当的String,其 id 对应于您在 strings.xml 文件中定义的 ID。您需要调用接受CharSequence 作为参数的方法。 gross.setText(String.valueOf(hours*wage));也一样

此外,在您的问题中添加堆栈跟踪总是好的,因为它可以帮助其他人更快地找到您的错误。

希望对您有所帮助! :)

【讨论】:

    【解决方案2】:

    在从 EditTexts 获取文本之前,您尚未初始化您的 EditTexts

    editHours = (EditText)findViewById(R.id.editHours_id);
    editWage = (EditText)findViewById(R.id.editWage_id);
    

    并将您的计算放在 onClick 中,因为最初它只会返回空字符串。

     ((Button) findViewById(R.id.addButton)).setOnClickListener(new     OnClickListener() {
                 @Override
                 public void onClick(View v) {
    
    //If your input contains decimal values also then use BigDecimal() 
    //Following code will work for both int and decimal values
    gross.setText(""+new BigDecimal(editHours.getText()
                            .toString()).multiply(new BigDecimal(editWage.getText()
                            .toString())));
                     StringBuilder str = new StringBuilder("It worked");
                     calculated.setText(str);
    
    
    
                 }
             });    
    

    【讨论】:

    • +1 很好地捕捉到未初始化的值 :)
    • 谢谢 Manishika 这解决了我的问题,但现在如果输入是小数会崩溃
    • 试试我更新的代码。这应该可以工作
    猜你喜欢
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多