Android意图额外数据丢失

时间:2015-11-30 08:11:11

标签: android android-intent

我试图在我的应用内部使用意图传递一些数据'附加功能。

我将数据附加到意图中,如下所示:

Intent i = new Intent(ActivityFrom.this, ActivityTo.class);
i.putExtra(CONST_KEY, true);
startActivity(i);

使用

public static final String CONST_KEY = "MyBooleanValue";

我试图在启动的ActivityTo的onCreate方法中检索数据,如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle extra = getIntent().getExtras();
    if ( extra != null ) {
        boolean b = extra.getBoolean(ActivityFrom.CONST_KEY);
    }
}

但是,我从未遇到过if-block,因为Bundle总是null

为什么我的演员会丢失?我需要更改什么来检索我为意图添加的额外内容?

修改

  • 更正了代码中的拼写错误
  • 添加了完整的onCreate方法声明
  • 以下是清单中的ActivityTo声明:

    <activity
        android:name=".ActivityTo"
        android:launchMode="singleTask"
        android:screenOrientation="portrait">
    </activity>
    

4 个答案:

答案 0 :(得分:8)

问题是接收任务的android:launchMode="singleTask"属性。设置此选项后,同一对象将接收以ActivityTo活动为目标的所有意图。如果已创建活动,则通过活动的onNewIntent(Intent)方法发送意图。像这样覆盖它:

protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}

这样,您可以使用getIntent()获取新意图。

答案 1 :(得分:0)

请确保您的对象属性位于 writeToParcel(Parcel parcel, int flags)YourObject(in)包裹中读取匹配内容

例如

public class User implements Parcelabel { 
private String name;
private String addrss;
private String city;

// read from parcel
protected User(Parcel in) {
name = parcel.readString();
address = parcel.readString();
city = parcel.readString();
}

// write to parcel
writeToParcel(Parcel parcel, int flags){
parcel.writeString(name);
parcel.writeString(address);
parcel.writeString(city);
}
}

答案 2 :(得分:-2)

我想你应该试试

if(getIntent().getBooleanExtra(ActivityFrom.CONST_KEY,false)!=null){
     Boolean b=getIntent().getBooleanExtra(ActivityFrom.CONST_KEY,false);
}

答案 3 :(得分:-2)

你可以试试这个

Main.java中的

Intent intent = new Intent(this, YourActivity.class);
String message = constkey.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);

上面的oncreate方法

public final static String EXTRA_MESSAGE = "com.example.project.MESSAGE";
YourActivity.java中的

Intent intent = getIntent();
        String message = intent.getStringExtra(Main.EXTRA_MESSAGE);

喜欢明智。