【问题标题】:Android app calculation error and crashAndroid 应用程序计算错误和崩溃
【发布时间】:2015-07-13 14:48:12
【问题描述】:

所以伙计们,我在这里尝试通过从 edittext's 获取字符串来获取 inputs(day,month,year),然后将其转换为 int 并制作添加然后显示它。 我认为代码是错误的,因为当我尝试运行此应用程序时,应用程序崩溃了,如果我删除了我用“//error”标记的那 3 行,它不会崩溃,但该功能仍然无法工作。 你能帮我吗??

package com.example.bibiwars.skills;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class Age extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_age);

    Button getage = (Button) findViewById(R.id.getage);
    EditText ddtext = (EditText) findViewById(R.id.dd);
    String dds = ddtext.getText().toString();
    final int dd = Integer.parseInt(dds);                          //error
    EditText mmtext = (EditText) findViewById(R.id.mm);
    String mms = mmtext.getText().toString();
    final int mm = Integer.parseInt(mms);                           //error
    EditText yyyytext = (EditText) findViewById(R.id.yyyy);
    String yyyys = yyyytext.getText().toString();
    final int yyyy = Integer.parseInt(yyyys);                     //error
    final TextView output = (TextView) findViewById(R.id.output);

    getage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            output.setText("you wrote:" + (dd + mm + yyyy));
        }
    });
}}

【问题讨论】:

  • 您能否发布 Logcat 错误消息,以便我们查看您遇到的错误类型?是 NullPointerException 吗?
  • 您能否提供您遇到的异常情况? NumberFormatException 或其他任何东西。因为我怀疑你正在整数上进行空字符串转换,因为你必须在按钮的点击中从edittext获取输入字符串。

标签: java android crash


【解决方案1】:

试试这个

public class Age extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_age);

    Button getage = (Button) findViewById(R.id.getage);
    EditText ddtext = (EditText) findViewById(R.id.dd);

    EditText mmtext = (EditText) findViewById(R.id.mm);

    EditText yyyytext = (EditText) findViewById(R.id.yyyy);

    final TextView output = (TextView) findViewById(R.id.output);

    getage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

             String dds = ddtext.getText().toString();
             int dd = Integer.parseInt(dds);

             String mms = mmtext.getText().toString();

             int mm = Integer.parseInt(mms);  

             String yyyys = yyyytext.getText().toString();
             int yyyy = Integer.parseInt(yyyys); 
            output.setText("you wrote:" + (dd + mm + yyyy));
        }
    });
}}

还在将String 转换为Int 之前检查是否为空

if (!TextUtils.isEmpty(yyyys))
{
    int yyyy = Integer.parseInt(yyyys); 
}

编辑

onCreate() 方法中没有填充数据,所以它总是抛出 NullPointerExceptionNumberFormatException - 正如 @Roberto Tellez Ibarra 的评论中所说强>

【讨论】:

  • 我认为这是正确的解决方案。 onCreate方法没有填充数据,所以总是抛出NullPointerException或NumberFormatException
  • 我不是作者我的朋友。我投票赞成你的答案:D
  • 是的,修复了错误,但我如何计算 (dd + mm + yyyy) 的值?
  • 对不起@RobertoTellezIbarra 这是错误的:)
  • @BahaBaghdadi how can I calculate the value of (dd + mm + yyyy) 是什么意思
【解决方案2】:

您必须在填充后检索EditText 的值。您无法在 onCreate 中确保这一点,因为您试图在视图启动后立即检索值并且用户没有机会在 EditText 中输入这些值。

onClick 中检索EditText 的值:

public void onClick(View v) {
    String dds = ddtext.getText().toString();
    final int dd = Integer.parseInt(dds);                          //error

    String mms = mmtext.getText().toString();
    final int mm = Integer.parseInt(mms);                           //error

    String yyyys = yyyytext.getText().toString();
    final int yyyy = Integer.parseInt(yyyys); 

    output.setText("you wrote:" + (dd + mm + yyyy));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    相关资源
    最近更新 更多