-3

我正在为 Android 编写一个应用程序,所有应用程序在我的 Android 4.1 上都可以正常工作,但是当我在我的其他 Android 2.2 上测试它时,除了表单之外,所有应用程序都可以正常工作,当您单击按钮发送表单时崩溃。

我试过注释不同的代码,我在 if-else 中发现了问题,但我不知道为什么我希望你能帮助我。

此代码发送表单:

private void createAccount(){
        EditText nombre = (EditText) findViewById(R.id.name);
        EditText mail = (EditText) findViewById(R.id.mail);
        EditText tel = (EditText) findViewById(R.id.phone);
        EditText pass = (EditText) findViewById(R.id.pass);
        EditText pass2 = (EditText) findViewById(R.id.pass2);

    name = nombre.getText().toString();
    email = mail.getText().toString();
    phone = tel.getText().toString();
    pas = pass.getText().toString();
    pas2 = pass2.getText().toString();

    if(name.isEmpty() == false && email.isEmpty() == false && phone.isEmpty() == false && pas.isEmpty() == false && pas2.isEmpty() == false){
        if(pas.equals(pas2)){
            respTxt = Cloud.CreateAccout(phone, name, email, pas, tel_id, tel_oper, tel_country);

            TextView alert = (TextView)findViewById(R.id.reg_alert);

            ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if(networkInfo != null && networkInfo.isConnected()){
                if(respTxt.equals("email")){
                    alert.setText(getText(R.string.reg_error1));
                    regBtn.setEnabled(true);
                }else if(respTxt.equals("error") || respTxt.equals("errorc")){
                    alert.setText(getText(R.string.reg_error2));
                    regBtn.setEnabled(true);
                }else if(respTxt.equals("correct")){
                    SharedPreferences settings = getSharedPreferences(prefs_file, 0);
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putBoolean("AccountCreated", true);
                    editor.putString("status", "ok");
                    editor.commit();
                    Intent move = new Intent(AppRegis.this, HomeAct.class);
                    startActivityForResult(move, 0);
                }
            }else{
                alert.setText(getText(R.string.noInternet));
                regBtn.setEnabled(true);
            }

        }else{
            TextView alert = (TextView)findViewById(R.id.reg_alert);
            alert.setText(getText(R.string.reg_alert)+" "+email);
            regBtn.setEnabled(true);
        }
    }else{
        TextView alert = (TextView)findViewById(R.id.reg_alert);
        alert.setText(getText(R.string.reg_alert2).toString());
        regBtn.setEnabled(true);
    }
}

LogCat 输出为

07-11 17:21:26.251: I/dalvikvm(335): Could not find method java.lang.String.isEmpty, referenced from method com.example/testactivity.createAccount()
07-11 17:21:26.251: W/dalvikvm(335): VFY: unable to resolve virtual method 177: Ljava/lang/String;.isEmpty ()Z
07-11 17:21:26.251: D/dalvikvm(335): VFY: replacing opcode 0x6e at 0x0042
07-11 17:21:26.251: D/dalvikvm(335): VFY: dead code 0x0045-0069 in Lcom/example/testactivity/createAccount() (Landroid/content/Context;Lcom/example/testtctivity;I)V
07-11 17:21:26.361: D/AndroidRuntime(335): Shutting down VM
07-11 17:21:26.361: W/dalvikvm(335): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
07-11 17:21:26.371: E/AndroidRuntime(335): FATAL EXCEPTION: main
07-11 17:21:26.371: E/AndroidRuntime(335): java.lang.NoSuchMethodError: java.lang.String.isEmpty
07-11 17:21:26.371: E/AndroidRuntime(335):  at com.example.testactivity.createAccount()(testactivity.java:178)

抛出异常的行是if(name.isEmpty() == false....

4

2 回答 2

5

这很有趣,因为我昨天自己也遇到了这个问题......

罪魁祸首不是if...else自己,而是name.isEmpty()和类似的。

LogCat 应该给你一个提示 - 对我来说,它记录了评论说“找不到虚拟 java.lang.String.isEmpty .....”。

如果您将鼠标悬停isEmpty()在 Eclipse 中,它会诚实地告诉您这isEmpty()是在... API 级别 9 中引入的,即 2.3。

如果您希望您的代码在 Froyo 中运行,您需要使用name.length() > 0- 这将从 API 级别 1 开始工作。

当然,如果可以接受的话,你可以在 manifest 中设置 minSDKLevel = 9 而忽略与 2.2 及以下的兼容性。

于 2013-07-11T16:35:24.730 回答
2

根据 Android 文档,.isEmpty()直到 API 级别 9 才添加。那是你的问题。Android 2.2 是 API 级别 8。

文档:http: //developer.android.com/reference/java/lang/String.html#isEmpty%28%29

于 2013-07-11T16:31:03.427 回答