在早期版本的android中找不到方法java.lang.String.isEmpty

时间:2013-07-11 16:27:06

标签: java android string backwards-compatibility

我正在为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....

2 个答案:

答案 0 :(得分:5)

这很有趣,因为我昨天在字面上碰到了这个问题......

罪魁祸首不是if...else本身,而是name.isEmpty()等。

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

如果你将鼠标悬停在Eclipse中的isEmpty()上,它会诚实地告诉你{API} 9引入了isEmpty(),这是2.3。

如果您希望代码在Froyo中运行,则需要使用name.length() > 0 - 这将启动API级别1。

当然,您可以在清单中设置minSDKLevel = 9并忘记与2.2及以下的兼容性,如果可以接受的话。

答案 1 :(得分:2)

根据Android文档,在API级别9之前未添加.isEmpty()。这是您的问题。 Android 2.2是API Level 8。

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