无法通过Android中的活动传递参数

时间:2015-09-28 20:47:02

标签: android

我是Android应用程序开发的新手,当我通过活动传递参数时,我遇到以下问题。在我的应用程序中,用户输入他的电子邮件,用户名和密码,单击提交按钮,然后他转到下一个活动(NewProfile.class),其中他的用户名应该在TextView中打印。但是当用户正确填写所有字段并显示Toast“Welcome to Allamoda”时,每个字段变为红色(仅当用户输入错误时才会发生这种情况)然后返回MainActivity。

Signup.class代码:

package dmst.allamoda;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

public class Signup extends ActionBarActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    setupVariables();
}
private EditText email;
private EditText username;
private EditText password1;
private EditText password2;
public static String PUBLIC_STATIC_STRING_IDENTIFIER = "";

public void signupControl(View view) {

    if ((email.getText().toString().trim().length() > 0) && (username.getText().toString().trim().length() > 0) && (password1.getText().toString().trim().length() > 0) &&
            (password2.getText().toString().trim().length() > 0) && (password1.getText().toString().equals(password2.getText().toString()))) {
        Toast.makeText(getApplicationContext(), "Welcome to AllaModa!",
                Toast.LENGTH_SHORT).show();

        Intent resultIntent = new Intent(this, NewProfile.class);
        resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, username.getText().toString());
        setResult(NewProfile.RESULT_OK, resultIntent);
        finish();

    } else {
        if (!(email.getText().toString().trim().length() > 0)) {
            Toast.makeText(getApplicationContext(), " email!",
                    Toast.LENGTH_SHORT).show();
        }
        if (!(username.getText().toString().trim().length() > 0)) {
            Toast.makeText(getApplicationContext(), " username!",
                    Toast.LENGTH_SHORT).show();
        }
        if (!(password1.getText().toString().trim().length() > 0)) {
            Toast.makeText(getApplicationContext(), " password!",
                    Toast.LENGTH_SHORT).show();
        }
        if (!(password2.getText().toString().trim().length() > 0)) {
            Toast.makeText(getApplicationContext(), " password!",
                    Toast.LENGTH_SHORT).show();
        } else {
            if (!(password1.getText().toString().equals(password2.getText().toString()))) {
                Toast.makeText(getApplicationContext(), "passwords!",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }

        email.setBackgroundColor(Color.parseColor("#F5CCCC"));
        email.setTextColor(Color.parseColor("#B80000"));
        username.setBackgroundColor(Color.parseColor("#F5CCCC"));
        username.setTextColor(Color.parseColor("#B80000"));
        password1.setBackgroundColor(Color.parseColor("#F5CCCC"));
        password1.setTextColor(Color.parseColor("#B80000"));
        password2.setBackgroundColor(Color.parseColor("#F5CCCC"));
        password2.setTextColor(Color.parseColor("#B80000"));
    }

private void setupVariables() {
    email = (EditText) findViewById(R.id.signupEmail);
    username = (EditText) findViewById(R.id.signupUsername);
    password1 = (EditText) findViewById(R.id.signup1Password);
    password2 = (EditText) findViewById(R.id.signup2Password);
}
}

2 个答案:

答案 0 :(得分:2)

Signup未转换为NewProfile活动。它返回到之前的活动(大概是MainActivity)。

这是问题代码:

    Intent resultIntent = new Intent(this, NewProfile.class);
    resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, username.getText().toString());
    setResult(NewProfile.RESULT_OK, resultIntent);
    finish();

据推测,你想做这样的事情:

    Intent intent = new Intent(this, NewProfile.class);
    intent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, username.getText().toString());
    startActivity(intent);
    finish();

[EDITED]

最后的finish();语句应该将Signup活动保留在更现代的设备中的历史堆栈之外。但是,这个答案的一些评论者(@AndrewBreen和@Cookster)表示这样做可能不适用于速度较慢的设备。

如果您对此感到担心,@ Cookster的评论提供了一个可能的解决方案,以避免拨打finish()

  

我用来避免这种情况的模式是打开活动   登录活动在onActivityResult中的路由容量中起作用,即   它检查登录状态,如果无效,则打开登录活动,   否则会执行需要身份验证状态等的操作。

答案 1 :(得分:0)

在活动a上尝试这个

Intent i = new Intent(this, ActivityB.class);
i.putExtra("SomeKEY",YourData);

在oncreate方法中的活动B

Bundle extras = getIntent().getExtras();
if(extras !=null)
if(extras !=null) {String value = extras.getString("KEY");}