繁体   English   中英

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

[英]Android - Trouble passing variables between activities using intents

我是Android的新手,我只是想将两个双打从一项活动传递到另一项。 这个问题已经在这个网站上以几种不同的方式被问了几次不同的时间,但是关于我的实现的某些事情导致我的应用程序被强制关闭。 我认为我的问题可能与我试图将变量传递到的活动中的“ savedInstanceState”捆绑销售有关。 我显然遗漏了很多代码,但是我包括了所有使用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);
    }
}

看起来不错,您的问题出在别的地方。 在设置意图以确保您的关键和价值是您真正认为的目的之前,请尝试添加打印件

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

您正在调用startActivityforresult尝试在onActivityResult获得捆绑包,而不是在oncreate可以覆盖此onActivityResult

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

这就是您应该传递值的方式。

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")

这是否消除了您的疑问?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM