Java 如何使用意图接收多个值

Java 如何使用意图接收多个值,java,android,Java,Android,我的主要活动使用startActivityForResult方法,该方法调用需要从中返回两个字符串值的活动。我用它来返回一个值,但即使有我读过的所有教程和其他问题,我似乎也无法让它返回两个值。下面是我的代码 下面是我开始第二项活动的地方: Button button = (Button) findViewById(R.id.add); button.setOnClickListener(new View.OnClickListener() { @Over

我的主要活动使用startActivityForResult方法,该方法调用需要从中返回两个字符串值的活动。我用它来返回一个值,但即使有我读过的所有教程和其他问题,我似乎也无法让它返回两个值。下面是我的代码

下面是我开始第二项活动的地方:

Button button = (Button) findViewById(R.id.add);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                startActivityForResult(addM, 1);    
            }

        });
这是它开始的活动,我需要返回titleField(现在可以使用)和yearField中的文本

public class AddMovie extends Activity {

String movieTitle, movieYear;
EditText titleField, yearField;
Button save;

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

    titleField = (EditText) findViewById(R.id.titleField);
    yearField = (EditText) findViewById(R.id.yearField);

    save = (Button) findViewById(R.id.saveMovie);

    save.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent data = new Intent();
            data.setData(Uri.parse(titleField.getText().toString()));
            setResult(RESULT_OK, data); 
            //data.setData(Uri.parse(yearField.getText().toString()));
            //setResult(RESULT_OK, data);
            finish();

        }
    });
}



}
下面是我的主类中接收结果的方法

public void onActivityResult(int requestCode, int resultCode, Intent data)
        {
            if(requestCode == request_Code)
            {
                if(resultCode == RESULT_OK)
                {
                    tempTitle = data.getData().toString();
                    //tempYear =       data.getStringExtra("movieYear");
                    Toast.makeText(this, tempTitle, Toast.LENGTH_SHORT).show(); 
                    dbAddMovie(tempTitle, tempYear);

                }
            }

        }
注释掉的代码是试图使其接收多个值的一次尝试,尽管它们失败了。在这种情况下,任何帮助都将是巨大的。谢谢

使用
data.putExtra(“键”,数据)而不是
data.setData(…)
并获得如下数据:

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

您应该能够在您的意图上添加额外的内容,并通过关联的标记获取该数据。这就是我在活动的onCreate中执行此操作的方式

Intent mIntent = new Intent(this, MainActivity.class);
mIntent.putExtra("your_tag", "the string you want to get");
startActivity(mIntent);
finish();
然后在活动中,您需要该数据(主活动或您所称的任何活动)

还值得注意的是,您可以覆盖MainActivity中的onNewIntent来处理新的意图,我的当前看起来像

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
}

您可以在您的
意图上使用
putExtra
方法:

data.putExtra("title", movieTitle);
data.putExtra("year", movieYear);
然后在打开的“活动”中,您可以按如下方式获取此数据:

String title, year;
Intent data = getIntent();
if (data != null) {
    title = data.getExtras().getString("title");
    year = data.getExtras().getString("year");
}

您应该使用以下内容:

Intent returnIntent = new Intent();
returnIntent.putExtra("title",titleField.getText().toString());
returnIntent.putExtra("year",yearField.getText().toString());
setResult(RESULT_OK,returnIntent);     
finish(); 
关于您的主要活动,onActivityResult:

tempTitle = data.getStringExtra("title");
tempYear =  data.getStringExtra("year");

您可以创建一个新的意图,然后添加两个变量

 Intent i = new Intent(getApplicationContext(), asd8.as.hwapp.timemonday.class);
            i.putExtra("username",username);
            i.putExtra("password", password);

            startActivity(i); 
然后检索新活动中的信息

public void getInformation(){

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        username = extras.getString("username");
        password = extras.getString("password");
    }
} 
试试这个

public class AddMovie extends Activity {

String movieTitle, movieYear;
EditText titleField, yearField;
Button save;

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

    titleField = (EditText) findViewById(R.id.titleField);
    yearField = (EditText) findViewById(R.id.yearField);

    save = (Button) findViewById(R.id.saveMovie);

    save.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent data = new Intent();
            data.putExtra("title_field", titleField.getText().toString);
            data.putExtra("year_field", yearField.getText().toString);

            setResult(RESULT_OK, data); 
            finish();

        }
    });
}
还有这个

public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if(requestCode == request_Code)
        {
            if(resultCode == RESULT_OK)
            {
                tempTitle = data.getStringExtra("title_field");
                tempYear = data.getStringExtra("year_field");

                Toast.makeText(this, tempTitle, Toast.LENGTH_SHORT).show(); 
                dbAddMovie(tempTitle, tempYear);

            }
        }

    }

为什么不在存储值的地方构建一个HashMap,并通过意图返回该值呢。
public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if(requestCode == request_Code)
        {
            if(resultCode == RESULT_OK)
            {
                tempTitle = data.getStringExtra("title_field");
                tempYear = data.getStringExtra("year_field");

                Toast.makeText(this, tempTitle, Toast.LENGTH_SHORT).show(); 
                dbAddMovie(tempTitle, tempYear);

            }
        }

    }