0

我是 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);
    }
}
4

3 回答 3

0

看起来不错,你的问题在其他地方。在设置意图之前尝试添加打印,以确保您的键和值是您真正认为的

于 2012-04-24T05:18:58.973 回答
0
int name = getIntent().getExtras().getInt(key);

您正在调用startActivityforresult.so 尝试将包放入onActivityResultnot in 。oncreate您可以覆盖它onActivityResult

  • 我认为这是尝试使用 this 获取捆绑包的问题。您将获得这个新变量的值。
于 2012-04-24T05:21:05.467 回答
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")

这是否消除了您的疑虑?

于 2012-04-24T05:32:45.877 回答