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