Java 我从Android ActivityForResult发送了一个parcelable类,收到null

Java 我从Android ActivityForResult发送了一个parcelable类,收到null,java,android,android-intent,android-activity,parcelable,Java,Android,Android Intent,Android Activity,Parcelable,对不起,常见的问题,但我检查了所有,找不到错误。我从活动中发送类,但收到NULL。创建意图后的检查是正确的(我的代码中的readbackCi)。你能帮我找到解决办法吗 我的班级城市项目 import android.os.Parcel; import android.os.Parcelable; public class CityItem implements Parcelable { public static final String ITEM_SEP = System.getProper

对不起,常见的问题,但我检查了所有,找不到错误。我从活动中发送类,但收到NULL。创建意图后的检查是正确的(我的代码中的readbackCi)。你能帮我找到解决办法吗

我的班级城市项目

import android.os.Parcel;
import android.os.Parcelable;

public class CityItem implements Parcelable {
public static final String ITEM_SEP = System.getProperty("line.separator");
public static final String NAME = "City";
public static final String REGNAME = "Region";
public static final String CODE = "Code";
public static final String SEARCH = "Search";

private String mName;
private String mRegName;
private String mSearch;
private String mCode;

public CityItem(String name, String regname, String code, String search) {
    mName = name;
    mRegName = regname;
    mSearch = search;
    mCode = code;
}

private CityItem(Parcel in) {
    in.readParcelable(CityItem.class.getClassLoader());
    setName(in.readString());
    setRegName(in.readString());
    setCode(in.readString());
    setSearch(in.readString());
}

public String getName() {
    return mName;
}

public void setName(String name) {
    mName = name;
}

public String getRegName() {
    return mRegName;
}

public void setRegName(String regname) {
    mRegName = regname;
}

public String getCode() {
    return mCode;
}

public void setCode(String code) {
    mRegName = code;
}

public String getSearch() {
    return mSearch;
}

public void setSearch(String search) {
    mRegName = search;
}

public String toString() {
    return mName + ITEM_SEP + mRegName + ITEM_SEP + mCode + ITEM_SEP
            + mSearch;
}

public String toLog() {
    return "Name:" + mName + ITEM_SEP + "Region:" + mRegName
            + ITEM_SEP + "Code:" + mCode + ITEM_SEP + "Search:"
            + mSearch + "\n";
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeStringArray(new String[] { mName, mRegName, mCode, mSearch });
}

public static final Parcelable.Creator<CityItem> CREATOR = new Parcelable.Creator<CityItem>() {
    @Override
    public CityItem createFromParcel(Parcel source) {
            return new CityItem(source);
        }
    @Override
    public CityItem[] newArray(int size) {
        return new CityItem[size];
    }
};
主要活动

public void enterClicked(CityItem str) {  
    Log.i(TAG,"Entered enterClicked()");
    Intent result = new Intent();
    result.putExtra("TAG", str);
    CityItem readbackCi = result.getParcelableExtra("TAG");
    Log.d(TAG, "\n\n\t" + readbackCi.NAME);
    setResult(this.RESULT_OK, result);

    finish();
}
    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i(TAG, "Entered onActivityResult()");
    if(ADD_DERIVAL_REQUEST == requestCode && this.RESULT_OK == resultCode)
    {
        CityItem ci = (CityItem) getIntent().getParcelableExtra("TAG");
        if (null != ci) {
            EditText1.setText(ci.getName());                
        }
        return;
    } else if (ADD_DERIVAL_REQUEST == requestCode && RESULT_CANCELED == resultCode)
    {
        return;
    }
}

您需要使用
Intent data
返回结果

CityItem ci=(CityItem)data.getParcelableExtra(“标记”)


getIntent()
将返回用于主活动启动的意图,但它不是您感兴趣的意图。

您的parcelable类CityItem的实现不正确。选中此项:

package com.mobgen.halo.android.sdk.generalcontent.business.parser;

import android.os.Parcel;
import android.os.Parcelable;

public class CityItem implements Parcelable {
    public static final String ITEM_SEP = System.getProperty("line.separator");
    public static final String NAME = "City";
    public static final String REGNAME = "Region";
    public static final String CODE = "Code";
    public static final String SEARCH = "Search";

    private String mName;
    private String mRegName;
    private String mSearch;
    private String mCode;

    public CityItem(String name, String regname, String code, String search) {
        mName = name;
        mRegName = regname;
        mSearch = search;
        mCode = code;
    }

    public String getName() {
        return mName;
    }

    public void setName(String name) {
        mName = name;
    }

    public String getRegName() {
        return mRegName;
    }

    public void setRegName(String regname) {
        mRegName = regname;
    }

    public String getCode() {
        return mCode;
    }

    public void setCode(String code) {
        mRegName = code;
    }

    public String getSearch() {
        return mSearch;
    }

    public void setSearch(String search) {
        mRegName = search;
    }

    public String toString() {
        return mName + ITEM_SEP + mRegName + ITEM_SEP + mCode + ITEM_SEP + mSearch;
    }

    public String toLog() {
        return "Name:" + mName + ITEM_SEP + "Region:" + mRegName
                + ITEM_SEP + "Code:" + mCode + ITEM_SEP + "Search:"
                + mSearch + "\n";
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.mName);
        dest.writeString(this.mRegName);
        dest.writeString(this.mSearch);
        dest.writeString(this.mCode);
    }

    protected CityItem(Parcel in) {
        this.mName = in.readString();
        this.mRegName = in.readString();
        this.mSearch = in.readString();
        this.mCode = in.readString();
    }

    public static final Creator<CityItem> CREATOR = new Creator<CityItem>() {
        public CityItem createFromParcel(Parcel source) {
            return new CityItem(source);
        }

        public CityItem[] newArray(int size) {
            return new CityItem[size];
        }
    };
}
package com.mobgen.halo.android.sdk.generalcontent.business.parser;
导入android.os.packet;
导入android.os.Parcelable;
公共类CityItem实现了Parcelable{
公共静态最终字符串项_SEP=System.getProperty(“line.separator”);
公共静态最终字符串NAME=“City”;
公共静态最终字符串REGNAME=“Region”;
公共静态最终字符串CODE=“CODE”;
公共静态最终字符串SEARCH=“SEARCH”;
私有字符串mName;
私有字符串mRegName;
私有字符串搜索;
私有字符串mCode;
公共城市项目(字符串名称、字符串注册表名、字符串代码、字符串搜索){
mName=名称;
mRegName=regname;
mSearch=搜索;
mCode=代码;
}
公共字符串getName(){
返回mName;
}
公共void集合名(字符串名){
mName=名称;
}
公共字符串getRegName(){
返回mRegName;
}
public void setRegName(字符串regname){
mRegName=regname;
}
公共字符串getCode(){
返回mCode;
}
公共无效设置码(字符串码){
mRegName=代码;
}
公共字符串getSearch(){
返回mSearch;
}
公共无效集合搜索(字符串搜索){
mRegName=搜索;
}
公共字符串toString(){
返回mName+ITEM_SEP+mRegName+ITEM_SEP+mCode+ITEM_SEP+mSearch;
}
公共字符串toLog(){
返回“名称:”+mName+物料_SEP+“区域:”+mRegName
+项目SEP+“代码:”+mCode+项目SEP+“搜索:”
+mSearch+“\n”;
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
dest.writeString(this.mName);
dest.writeString(this.mRegName);
dest.writeString(this.mSearch);
dest.writeString(this.mCode);
}
受保护城市项目(地块位于){
this.mName=in.readString();
this.mRegName=in.readString();
this.mSearch=in.readString();
this.mCode=in.readString();
}
公共静态最终创建者=新创建者(){
公共城市项目createFromParcel(地块源){
返回新的CityItem(源);
}
公共城市项目[]新数组(整数大小){
返回新的CityItem[大小];
}
};
}

除此之外,您还必须使用“数据”
Intent
,而不是用于启动此活动的
getIntent()
中的数据。

没错!非常感谢你!