Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过Android中的活动传递参数_Android - Fatal编程技术网

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

无法通过Android中的活动传递参数,android,Android,我是android应用程序开发新手,当我通过活动传递参数时,我遇到以下问题。在我的应用程序中,用户输入他的电子邮件、用户名和密码,单击提交按钮,然后进入下一个活动(NewProfile.class),在该活动中,他的用户名应打印在文本视图中。但是,当用户正确填写所有字段并显示toast“Welcome to Allamoda”时,每个字段都变为红色(仅当用户输入错误时才会出现这种情况),然后返回MainActivity 注册类别代码: package dmst.allamoda; import

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

注册类别代码:

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);
}
}

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();
[已编辑]

finish()语句应将
注册
活动排除在历史堆栈之外。然而,对此答案的一些评论(@AndrewBreen和@Cookster)指出,在速度较慢的设备上这样做可能不起作用

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

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

在活动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");}

我不清楚你的预期和实际结果是什么,你能在你的问题中更具体一些吗?我编辑了我的问题。现在清楚了吗?对不起,不,我还是不清楚。(1) 你想开始一项新的活动吗?或者(2)您是否试图返回MainActivity并想知道为什么每个字段都变成红色?关于#1,请参见下面cybersam的答案。对于#2,我们需要在MainActivity中查看代码。奇怪的是,我试图编辑它并删除“finish()”,但它做了其他事情。无论如何,启动新活动时最好不要调用finish()。这可能导致Signup.class在NewProfile出现之前退出。在转换之间,用户可能会看到后台堆栈上的任何内容闪烁。@Cookster当您要在转换到另一个活动时从历史堆栈中删除当前活动(如用于登录的活动)时,这是一种非常常见的编码模式。请提供证据,证明它可能导致您列出的问题,并在理想情况下,显示更好的解决方案。我曾经工作过,但现在不显示NewProfile.class中获取参数值的TextView。这是我在NewProfile.class
@Override public void onActivityResult(int requestCode,int resultCode,Intent data){super.onActivityResult(requestCode,resultCode,data);switch(requestCode){case(1):{if(resultCode==NewProfile.RESULT\u OK){String newText=data.getStringExtra(public\u STATIC\u String\u标识符);TextView TextView=(TextView)findViewById(R.id.username);TextView.setTextSize(40);TextView.setText(newText);setContentView(TextView);}break;}}}}}}
onActivityResult()
仅在启动的活动返回到活动时调用。在本例中,
NewProfile
没有启动另一个活动——它是正在启动的活动(通过
Signup
)。您可能需要将最内层块中的逻辑移动到中。您应该学习活动生命周期的文档,或者参考一本好书安卓。@cybersam-在本场景中,活动a启动活动B,然后活动B完成并启动活动C。在本场景中,您创建了一个条件,在显示活动C之前,活动a可能进入视图。典型的流程是A->B->C,具有平滑的过渡。但是,通过显式调用finish(),您可能会打破将活动B留在前台而将活动C转换为视图的转换。正如上面用户所说,较慢的系统和较慢的硬件通常表现出这种行为。