1

我编写了以下代码以将值传递给活动

  Intent intent = new Intent(DetailActivity.this,
                        MyMapActivity.class);
        intent.putExtra("tourguide.intent.extra.isbusiness", false);

        startActivity(intent);

在接收端我有以下代码

boolean IsBusiness = false;
    IsBusiness = getIntent().getParcelableExtra(
        "tourguide.intent.extra.isbusiness");

我收到 NullPointerException 错误

我什至尝试使用 CASTING 如下

 IsBusiness = (boolean)getIntent().getParcelableExtra(
        "tourguide.intent.extra.isbusiness");

但是没有用。:(

4

4 回答 4

3

尝试

  getIntent().getBooleanExtra(name, defaultValue);

就像是,

 IsBusiness = getIntent().getBooleanExtra("tourguide.intent.extra.isbusiness", false);
于 2012-12-31T09:30:04.697 回答
1

首先,使用 getIntent() 方法获取启动活动的意图:

Intent intent = getIntent();

IsBusiness = intent.getBooleanExtra("mauritiustourguide.intent.extra.isbusiness");
于 2012-12-31T09:29:43.813 回答
1

只需传递布尔值而不是字符串一。不需要可包裹的物品。在你的情况下

Intent intent = new Intent(DetailActivity.this,
                        TourMapActivity.class);
intent.putExtra("isBusiness", false);

startActivity(intent);

您可以使用 Parselable mechanizm 将实体序列化为普通类型。

这是 Google 使用 Parselable 的第一个示例。

公共类 ObjectA 实现 Parcelable {

private String strValue;
private Integer intValue;

/**
 * Standard basic constructor for non-parcel
 * object creation
 */
public ObjectA() { ; };

/**
 *
 * Constructor to use when re-constructing object
 * from a parcel
 *
 * @param in a parcel from which to read this object
 */
public ObjectA(Parcel in) {
    readFromParcel(in);
}

/**
 * standard getter
 *
 * @return strValue
 */
public String getStrValue() {
    return strValue;
}

/**
 * Standard setter
 *
 * @param strValue
 */
public void setStrValue(String strValue) {
    this.strValue = strValue;
}

/**
 * standard getter
 *
 * @return
 */
public Integer getIntValue() {
    return intValue;
}

/**
 * Standard setter
 *
 * @param intValue
 */
public void setIntValue(Integer intValue) {
    this.intValue = intValue;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {

    // We just need to write each field into the
    // parcel. When we read from parcel, they
    // will come back in the same order
    dest.writeString(strValue);
    dest.writeInt(intValue);
}

/**
 *
 * Called from the constructor to create this
 * object from a parcel.
 *
 * @param in parcel from which to re-create object
 */
private void readFromParcel(Parcel in) {

    // We just need to read back each
    // field in the order that it was
    // written to the parcel
    strValue = in.readString();
    intValue = in.readInt();
}

/**
 *
 * This field is needed for Android to be able to
 * create new objects, individually or as arrays.
 *
 * This also means that you can use use the default
 * constructor to create the object and use another
 * method to hyrdate it as necessary.
 *
 * I just find it easier to use the constructor.
 * It makes sense for the way my brain thinks ;-)
 *
 */
public static final Parcelable.Creator CREATOR =
    new Parcelable.Creator() {
        public ObjectA createFromParcel(Parcel in) {
            return new ObjectA(in);
        }

        public ObjectA[] newArray(int size) {
            return new ObjectA[size];
        }
    };

}

于 2012-12-31T09:32:07.780 回答
0

我认为这Code将对您有所帮助

传递给活动:

Intent i = new Intent(getBaseContext(), NameOfActivity.class);
i.putExtra("my_boolean_key", myBooleanVariable);
startActivity(i)

在第二个活动中检索:

Bundle bundle = getIntent().getExtras();
boolean myBooleanVariable = bundle.getBoolean("my_boolean_key");
于 2012-12-31T09:30:22.067 回答