java - 当其他编辑文本具有给定输入时,android eclipse 自动生成编辑文本

标签 java android eclipse

我有 3 个编辑文本、1 个输入价格、1 个百分比和最后一个表示它们两者的结果。它工作得很好,但是当我从第二个编辑文本中删除输入时,应用程序会崩溃。知道我在哪里做了错了吗?或者更好的方法来实现这个。我希望它在用户填充和清空的编辑文本中起作用。

代码如下:

public class Mastercode extends Activity implements TextWatcher ,AdapterView.OnItemSelectedListener/*,View.OnClickListener*/{
    int tumbal1,tumbal2,tumbal3,tumbal4;
    EditText ethint1, etpersen2, textvDP1;
    Button bkalkulasi1;
  //  private final String[] items ={"Zona 1","Zona 2","Zona 3"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub      
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simulasikredit);
        ethint1 = (EditText) findViewById(R.id.ethint);
        etpersen2 = (EditText) findViewById(R.id.etpersen);     
        textvDP1 = (EditText) findViewById(R.id.textvDP);
        bkalkulasi1 = (Button)findViewById(R.id.bkalkulasi);
        // NumberFormat format = NumberFormat.getCurrencyInstance();
         //((EditText) findViewById(R.id.ethint)).setText(format.format(ethint1));
        // ((EditText) findViewById(R.id.textvDP)).setText(format.format(textvDP1));        
        etpersen2.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String text1 = ethint1.getText().toString();
                String text2 = etpersen2.getText().toString();
                 int input1 = Integer.valueOf(text1);
                    int input2 = Integer.valueOf(text2);                    
                if (text1.length() != 0) {    
                    int output = (input1 * input2) / 100;
                    textvDP1.setText(""+output /*+ ""*/);                                    
                }
                else if(text2.length() == 0/*trim().equals("")*/){
                    String input3 = Integer.toString(input2);
                    textvDP1.setText(""+input3);
                }
            }
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });

logcat日志:

02-16 14:43:12.331: E/AndroidRuntime(609): FATAL EXCEPTION: main
02-16 14:43:12.331: E/AndroidRuntime(609): java.lang.NumberFormatException: unable to parse '' as integer
02-16 14:43:12.331: E/AndroidRuntime(609):  at java.lang.Integer.parse(Integer.java:433)
02-16 14:43:12.331: E/AndroidRuntime(609):  at java.lang.Integer.parseInt(Integer.java:422)
02-16 14:43:12.331: E/AndroidRuntime(609):  at java.lang.Integer.parseInt(Integer.java:382)
02-16 14:43:12.331: E/AndroidRuntime(609):  at java.lang.Integer.valueOf(Integer.java:682)
02-16 14:43:12.331: E/AndroidRuntime(609):  at com.m4nd1r1tun45f1n4nc3.abcdefg.Mastercode$1.onTextChanged(Mastercode.java:43)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.widget.TextView.handleTextChanged(TextView.java:6172)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6316)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:583)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:174)
02-16 14:43:12.331: E/AndroidRuntime(609):  at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:120)
02-16 14:43:12.331: E/AndroidRuntime(609):  at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:247)
02-16 14:43:12.331: E/AndroidRuntime(609):  at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:73)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.os.Looper.loop(Looper.java:123)
02-16 14:43:12.331: E/AndroidRuntime(609):  at android.app.ActivityThread.main(ActivityThread.java:4627)
02-16 14:43:12.331: E/AndroidRuntime(609):  at java.lang.reflect.Method.invokeNative(Native Method)
02-16 14:43:12.331: E/AndroidRuntime(609):  at java.lang.reflect.Method.invoke(Method.java:521)
02-16 14:43:12.331: E/AndroidRuntime(609):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-16 14:43:12.331: E/AndroidRuntime(609):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-16 14:43:12.331: E/AndroidRuntime(609):  at dalvik.system.NativeStart.main(Native Method)

编辑代码:

etpersen2.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String text1 = ethint1.getText().toString();
                String text2 = etpersen2.getText().toString();
                int input1 = 0;
                int input2 = 0;
                if(text1.length()>0)
                      input1 = Integer.valueOf(text1);
                if(text2.length()>0)
                      input2 = Integer.valueOf(text2);                
                if (text1.length() != 0) {    
                    int output = (input1 * input2) / 100;
                    textvDP1.setText(""+output /*+ ""*/);                                    
                }
                else if(text2.length() == 0/*trim().equals("")*/){
                    /*String input3 = Integer.toString(input2);*/
                    textvDP1.setText(""/*+input3*/);
                }
            }
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });

现在可以用了,谢谢大家

最佳答案

改变这两行

int input1 = Integer.valueOf(text1);
int input2 = Integer.valueOf(text2);   

int input1=0;
int input2=0;
if(text1.length()>0)
  input1 = Integer.valueOf(text1);
if(text2.length()>0)
  input2 = Integer.valueOf(text2);

因为如果字符串无法解析为整数,ValueOf(-) 将抛出 NumberFormatException

这是文档 http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#valueOf%28java.lang.String%29

希望对您有所帮助。

关于java - 当其他编辑文本具有给定输入时,android eclipse 自动生成编辑文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28554915/

相关文章:

java - 从方法开始 Activity

javascript - MobileServiceClient.getPush() 方法在 Azure 移动服务中无效到 Android、JS 后端教程

java - 如果缺少方法描述则显示警告

javascript - 如何使像 VSCode 或 WebStorm 这样的 JavaScript IDE 在代码完成方面像 Eclipse 一样智能?

android - 在 firebase 上保存数据时应用程序崩溃并出现 'java.lang.StackOverflowError: stack size 8MB' 错误

java - 安装拆分 apk 时出错 : com. android.ddmlib.InstallException:无法完成 session :INSTALL_FAILED_INVALID_APK

android - 如何在 DatePicker 中选择年份 FIRST

java - 如何将 IObservableSet 绑定(bind)到 IObservableList?

java - 如何使用 Webflux 上传多个文件?

java - 有什么方法可以检测方法或类是否已被删除? java