【问题标题】:Android String to int crashes my appAndroid String to int 使我的应用程序崩溃
【发布时间】:2014-03-08 08:43:50
【问题描述】:

我正在尝试制作一个应用程序,其中用户将电话号码输入到 EditText 变量 NumberBox 中,然后从字符串转换为 int 并在方法 intent.putExtra("address", PhoneNumberint); 中使用当我尝试这样做时,应用程序崩溃了,所以请让我知道问题出在哪里。从 string 到 int 的转换在某种程度上是错误的吗?

package com.example.module09;

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

public class MainActivity extends Activity {

    //variables

    EditText    NumberBox;
    Button      SMSButton;



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

        //

        NumberBox = (EditText) findViewById(R.id.NumberBox);
        SMSButton = (Button) findViewById(R.id.SMSButton); 
        final int PhoneNumberint = Integer.parseInt(NumberBox.getText().toString());


        //onclick
        SMSButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.putExtra("address", PhoneNumberint);
                intent.setType("vnd.android-dir/mms-sms");
                startActivity(intent);

            }
        });




    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

【问题讨论】:

  • 改用:final int PhoneNumberint = Integer.valueOf(NumberBox.getText().toString());
  • 使用了这个Integer.valueOf(age.getText().toString());

标签: android string android-intent int


【解决方案1】:

移动一下:

final int PhoneNumberint = Integer.parseInt(NumberBox.getText().toString()); 

从您的 onCreate 方法到 onClick 方法。

应用程序崩溃是因为您已将上述代码放入您的 onCreate 方法中。因为在Activity 创建时EditText 的值为nullString 包含null。当null 被解析为Integer 时会抛出异常。

【讨论】:

  • onClick()中不需要final关键字
【解决方案2】:

您尝试在 onCreate 方法上获取值为 null 的值,您必须在单击按钮时获取该值,如下代码所示:

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

        //

        NumberBox = (EditText) findViewById(R.id.NumberBox);
        SMSButton = (Button) findViewById(R.id.SMSButton); 


        //onclick
        SMSButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                PhoneNumberint = Integer.parseInt(NumberBox.getText().toString());
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.putExtra("address", PhoneNumberint);
                intent.setType("vnd.android-dir/mms-sms");
                startActivity(intent);

            }
        });

【讨论】:

  • 好的,我已经将该行移到 onclick 方法中,现在应用程序可以运行了!但是,输入到 NumberBox 变量中的号码不会出现在 SMS 消息中。它只是显示为空白!
  • @ssj3goku878 作为一个单独的问题提出。
  • 您到底需要什么?将号码放入默认短信应用程序?
  • 我希望将变量 PhoneNumberint 设置为用于 SMS 的号码。在这种情况下,当我单击按钮 SMSButton 时,SMS 号码字段为空。
【解决方案3】:

您不能在 onCreate() 方法上执行此操作

 final int PhoneNumberint = Integer.parseInt(NumberBox.getText().toString());

第一次你的 String 包含空数据,因为它始终是你的 EditText 的空值,这就是为什么你总是会得到空指针,因为你不能将空值解析为 int。

在 Button 的 Click 事件上移动该行的更好方法。

【讨论】:

    【解决方案4】:

    应用因NumberFormatException而崩溃

    问题在于您在设置之前从EditText 提取文本。如果 EditText 的内容为空/null 字符串,Integer.parseInt 将抛出 java.lang.NumberFormatException
    罪魁祸首是这一行:

    final int PhoneNumberint = Integer.parseInt(NumberBox.getText().toString());
    

    要解决此问题move this line under onClick()。但是,如果在 EditText 中没有输入任何内容就单击了按钮,应用程序仍然会崩溃。

    在将 String 解析为 Int 之前,写入检查 String 是否为空/null。
    在较轻的方面,这里不需要final 关键字。

    【讨论】:

      猜你喜欢
      • 2015-08-16
      • 2014-05-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 2016-11-20
      • 1970-01-01
      • 2014-05-07
      相关资源
      最近更新 更多