当我尝试获取号码时,为什么我的活动会崩溃?

时间:2017-02-01 01:34:23

标签: java android

我有一个名为AddItem的活动,其中包含一些用户填写的字段,我现在正尝试将它们传递给另一个活动。通过这样做,我能够获得前两个字段:

String messageText = ((EditText) findViewById(R.id.inputName)).getText().toString();
String discriptionText = ((EditText) findViewById(R.id.description)).getText().toString();

上面的代码很有趣,但后来我尝试获得另一个值,然后我将其转换为双重代码:

double Latitude = Double.parseDouble(((EditText) findViewById(R.id.Latitude)).getText().toString());

这有点漫长而复杂,但除了解析String并将其转换为double值之外,我基本上都在做同样的事情。我确定这是问题代码,因为当我评论它时,应用程序的其余部分运行正常。

这是我的活动:

public class AddItem extends AppCompatActivity {

  EditText inputedTask, inputedDescription, inputedLatitude;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_item);
    inputedTask = (EditText) findViewById(R.id.inputName);
    inputedDescription = (EditText) findViewById(R.id.description);
    inputedLatitude = (EditText) findViewById(R.id.Latitude);
  }

  public void onSaveItemButton(View view) {
    String messageText = ((EditText) findViewById(R.id.inputName)).getText().toString();
    String discriptionText = ((EditText) findViewById(R.id.description)).getText().toString();
    double Latitude = Double.parseDouble(((EditText) findViewById(R.id.Latitude)).getText().toString());

    if (messageText.equals(""));
    else {
      Intent intent = new Intent();
      intent.putExtra(Intent_Constant.INTENT_MESSAGE_FIELD, messageText);
      setResult(Intent_Constant.INTENT_RESULT_CODE, intent);
      finish();
    }
  }
}

2 个答案:

答案 0 :(得分:4)

您需要从documentation

为onClick创建一个公共方法
  

在承载此布局的Activity中,使用以下方法   处理click事件:

/** Called when the user touches the button */ 
public void sendMessage(View view) {
  // Do something in response to button click 
}
     

您在android:onClick属性中声明的方法必须具有   签名完全如上所示。具体来说,该方法必须:

     
      
  • 公开
  •   
  • 返回无效
  •   
  • 将视图定义为唯一参数(这将是   是被点击的视图)
  •   

因此 需要 将方法更改为公开

public void onSaveItemButton(View view) {
  ...
}

<强>更新
正如错误日志所示:

  

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)                      引起:java.lang.NumberFormatException:无效的double:&#34;&#34;                         at java.lang.StringToReal.invalidReal(StringToReal.java:63)                         在java.lang.StringToReal.parseDouble(StringToReal.java:267)                         在java.lang.Double.parseDouble(Double.java:301)                         在cs4720.cs.virginia.edu.duysalahandroidminiproject02.AddItem.onSaveItemButton(AddItem.java:33)

您需要在以下代码中捕获空字符串:

double Latitude = Double.parseDouble(((EditText) findViewById(R.id.Latitude)).getText().toString());

所以,先检查一下:

String val = ((EditText) findViewById(R.id.Latitude)).getText().toString();
if(!val.equals("") {
  double Latitude = Double.parseDouble(val);
}

答案 1 :(得分:-1)

您正在从未初始化的视图中调用 onSaveItemButton 方法。您必须在活动中的 onCreate 中初始化 btnChangeDate

检查this answer