2015-10-13 2 views
0

Извините за общий вопрос, но я проверяю все и не могу найти ошибку. Я отправляю класс из Activity и получаю NULL. Проверка после создания Intent правильная (readbackCi в моем коде). Не могли бы вы помочь мне найти решение?Отправляю классный класс из Android ActivityForResult и получаю null

Мой класс CityItem

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; 
    } 
} 

ответ

1

Для получения результата вам понадобится: Intent data.

CityItem ci = (CityItem) data.getParcelableExtra("TAG");

getIntent() вернется намерение, который был использован для главного старта деятельности и это не один вы заинтересованы в.

+0

Точно! Спасибо огромное! –

1

Реализация для вашего 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]; 
     } 
    }; 
} 

Кроме того, вы должны использовать «данные» Intent вместо одного из getIntent(), который является тот, который был использован, чтобы начать эту деятельность.

+0

Thanx! Правильный код. –