Android - 使用意图在活动之间传递变量时遇到问题

时间:2012-04-24 05:08:41

标签: android class variables android-intent

我是Android新手,我只是想将两个双打从一个活动传递到另一个活动。这个问题已经在几个不同的时间在这个网站上以几种不同的方式被问过,但是关于我的实现的一些问题导致我的应用程序强行关闭。我想我的问题可能是我正在尝试将变量传递给的活动中的“savedInstanceState”Bundle。我显然遗漏了很多代码,但是我包含了使用Bundles的所有地方。

[编辑] - 我发现了一个糟糕的编程解决方案,我需要做的事情。我将公共静态变量放在接收类中,并从发送类访问它们。我意识到这是糟糕的编程,但它做了我想要的。感谢所有试图提供帮助的人。我将继续尝试以正确的方式做到这一点。

如果没有i.putExtra行和涉及Bundle extra的任何行,它可以正常工作。这是代码:

int lat = 0;
int lon = 0;
private void createNote() {
    Intent i = new Intent(this, NoteEdit.class);
    i.putExtra("lat", lat);
    i.putExtra("lon", lon);
    startActivityForResult(i, ACTIVITY_CREATE);
}

这是我发给他们的活动:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle extra = getIntent().getExtras();
    int lat = extra.getInt("lat");
    int lon = extra.getInt("lon");

mRowId = (savedInstanceState == null) ? null : (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
    if (mRowId == null) {
        Bundle extras = getIntent().getExtras();
        mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID) : null;
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    saveState();
    outState.putSerializable(NotesDbAdapter.KEY_ROWID, mRowId);
}

@Override
protected void onPause() {
    super.onPause();
    saveState();
}

@Override
protected void onResume() {
    super.onResume();
    populateFields();
}

private void saveState() {
    String title = mTitleText.getText().toString();
    String body = mBodyText.getText().toString();
    String lattitude = mLatText.getText().toString();
    String longitude = mLonText.getText().toString();
    String date = mDateText.getText().toString();
    String time = mTimeText.getText().toString();

    if (mRowId == null) {
        long id = mDbHelper.createNote(title, body, lattitude, longitude, date, time);
        if (id > 0) {
            mRowId = id;
        }
    } else {
        mDbHelper.updateNote(mRowId, title, body, lattitude, longitude, date, time);
    }
}

3 个答案:

答案 0 :(得分:0)

看起来很好,你的问题就在其他地方。 尝试在设置意图之前添加打印件,以确保您的密钥和值是您真正认为的那些

答案 1 :(得分:0)

int name = getIntent().getExtras().getInt(key);

您正在呼叫startActivityforresult。请尝试在onActivityResult中获取不在oncreate中的捆绑包。您可以覆盖此onActivityResult

  • 我认为这是尝试使用此功能获取捆绑包的问题。您将获得此新变量的值。

答案 2 :(得分:0)

这是传递值的方法。

Bundle bundle = new Bundle();
bundle.putString("str1", str1);
bundle.putInt("int1", int1);
bundle.putDouble("double1", double1);
Intent i = new Intent(this, Activity2.class);
i.putExtras(bundle);
startActivityForResult(i);

这就是你在下一个活动中获得它们的方式

int int1 = getIntent().getExtras().getInt("int1")
String str1 = getIntent().getExtras().getString("str1")
double double1 = getIntent().getExtras().getDouble("double1")

这清楚了你的怀疑吗?