Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将两个编辑文本相乘_Java_Android - Fatal编程技术网

Java 将两个编辑文本相乘

Java 将两个编辑文本相乘,java,android,Java,Android,我正在尝试乘以两个EditText,包括editHours和editWage,并在TextView(gross)中显示结果。非常感谢您的帮助 public class PayrollActivity extends Activity implements OnClickListener { TextView gross, net, calculated; EditText editHours, editWage; int hours, wage, intGross, intNet, pa

我正在尝试乘以两个EditText,包括editHours和editWage,并在TextView(gross)中显示结果。非常感谢您的帮助

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

有几个问题

首先,在
onCreate
中对
EditText
s调用
getText()
方法时,它们仍然是空的(未初始化请参见@Manishika)。因此,
Integer.parseInt
将尝试解析空的
字符串。将其移动到按钮的
onClick
方法中,这是您想要的行为(即,当您单击它时,它将两个
EditText
的值相乘,并将结果设置为
TextView

其次,在执行
gross.setText(小时*工资)时
,您将调用以
int
为参数的
setText
方法。Android系统将尝试加载相应的
字符串
,其id与您在
strings.xml
文件中定义的id相对应。您需要调用接受
CharSequence
作为参数的方法。同样的做法是
gross.setText(String.valueOf(hours*wage))

另外,在你的问题中添加stacktrace也很好,因为它可以帮助其他人更快地发现你的错误


希望有帮助!:)

在从编辑文本中获取文本之前,您尚未初始化编辑文本

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);



             }
         });    

你有什么问题?我的应用程序在'code'小时=Integer.parseInt(editHours.getText().toString());'代码“崩溃在”。stacktrace?第一件事。您是否在edittext inputtype中提供了inputtype?用它作为预防措施。异常名称是什么?+1对于未初始化的值来说很好:)谢谢Manishika这解决了我的问题,但是现在如果输入是分贝,它就会崩溃我的更新代码。这应该行得通