应用程序从intent接收数据时崩溃

时间:2016-06-27 00:50:32

标签: java android android-intent

我想在两个活动之间发送数据。我想从第二个活动向第一个活动发送两个字符串,其中字符串将被操作并应用于代码。以下是我在第二个活动中将字符串发送到第一个活动的意图:

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

    phoneNum = (EditText)findViewById(R.id.phoneNum);
    msgCounter = (EditText)findViewById(R.id.msgCount);
    apply = (Button)findViewById(R.id.butto);
    save = (Button)findViewById(R.id.butt);


    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent pass = new Intent();
            pass.putExtra("value", phoneNum.getText().toString());
            pass.putExtra("cost",msgCounter.getText().toString());
            startActivity(pass);
        }
    });

以下是我在第一次接收数据时的意图:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_text_messages);
    request_code = 1;

    FloatingActionButton button = (FloatingActionButton) findViewById(R.id.but);

    assert button != null;
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent = new Intent(TextMessages.this,Settings.class);
            startActivityForResult(intent, request_code);

            Intent a = new Intent(TextMessages.this,Settings.class);
            startActivityForResult(a, recode);

        }
    });


    Intent pass = getIntent();
    String address = pass.getStringExtra("value");
    String string2 = pass.getStringExtra("cost");

然而,当我启动它时,应用程序总是会崩溃。所以我不能使用任何数据。在此先感谢我可能收到的任何帮助。

3 个答案:

答案 0 :(得分:1)

在第一个活动中,您应该从onActivityResult获取字符串。您不应该在第二个活动中使用startActivity。
查看此链接以获取更多信息 https://developer.android.com/training/basics/intents/result.html
在第二个活动中,您应该使用setResult方法。

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

phoneNum = (EditText)findViewById(R.id.phoneNum);
msgCounter = (EditText)findViewById(R.id.msgCount);
apply = (Button)findViewById(R.id.butto);
save = (Button)findViewById(R.id.butt);


save.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent pass = new Intent();
        pass.putExtra("value", phoneNum.getText().toString());
        pass.putExtra("cost",msgCounter.getText().toString());
        setResult(Activity.RESULT_OK,pass);
        finish();
    }
});

在你的第一个活动中,你应该在onActivityResult方法中获得Intent数据。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == request_code) {
        if(resultCode == Activity.RESULT_OK){
            String value=data.getStringExtra("value");
            String cost=data.getStringExtra("cost");
            //handle value and cost.
        }
    }
}

答案 1 :(得分:0)

我认为这是因为你在实例化你的意图时错过了放置目标Activity类。它应该是这样的:

Intent pass = new Intent(TargetActivity.class);
pass.putExtra("value", phoneNum.getText().toString());
pass.putExtra("cost",msgCounter.getText().toString());
startActivity(pass);

希望它有所帮助。

编辑:但我同意阿卜杜拉的意见。由于第一个活动启动了第二个活动,因此使用onActivityResult将值传递给第一个活动。

答案 2 :(得分:0)

我的猜测是,应用程序启动到您发布的第二个代码块。启动应用时,String address = pass.getStringExtra("value");String string2 = pass.getStringExtra("cost");没有任何价值 - 仅当第二个活动将这些活动发送到第一个活动时。我建议找到一种方法来确定它是第二个创建第一个活动的活动,还是创建一个方法来在第一个活动中设置这些值并在第二个活动中调用它。此外,您的第二项活动应该是:

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

    phoneNum = (EditText)findViewById(R.id.phoneNum);
    msgCounter = (EditText)findViewById(R.id.msgCount);
    apply = (Button)findViewById(R.id.butto);
    save = (Button)findViewById(R.id.butt);


    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent pass = new Intent(SecondActivity.this, FirstActivity.class);
            pass.putExtra("value", phoneNum.getText().toString());
            pass.putExtra("cost",msgCounter.getText().toString());
            startActivity(pass);
        }
    });