2012-05-13 138 views
1

我有一個包含我想意圖之間傳遞數據的類之間傳遞對象,這個類有一個包含另一個類的對象數組列表。這是我的班怎麼意圖

public class ParsedData implements Parcelable { 

     public String error; 
     public float protectionLevel; 
     public int protectionLevelColor; 
     public double lastBackup; 
     public boolean compressedType; 
     public Long driveFreeSpaceSize; 
     ArrayList<Item>Items = new ArrayList<Item>(); 
} 

class Item { 

    public String name; 
    public float percentage; 
    public int files; 
    public long size; 
} 

我該如何發送此類之間的意圖?

+0

你應該閱讀HTTP ://mobileorchard.com/android-app-development-using-intents-to-pass-data-and-return-results-between-activities/。很多關於Intents的信息,並傳遞額外的數據。還有一點關於使用數據並從Intent返回數據。 – Hidde

+0

它有助於在'Item'中實現'Parcelable'嗎? –

回答

1

這可能是你的問題:

類實現Parcelable接口還必須有一個靜態字段名爲CREATOR,這是一個實現了Parcelable.Creator接口的對象。

另外,我也會嘗試讓Item執行Parcelable,以及。

故障安全的替代方法是將數據結構寫入JSON字符串,該字符串還允許您將數據傳遞給其他無法訪問ParsedData類的應用程序。

+0

非常感謝你實際上那是我的問題,我讓Item類實現Parcelable – AnasBakez

1

你可以看看Intent.putExtra(字符串名稱,Parcelable對象),實現你們班parcelable接口。

+0

我不能包裹ArrayList中,這是我的問題 – AnasBakez

+0

另一種解決方案是,你可以創建數組列表靜態類,那麼你可以將它傳遞到另一個應用程序而無需實現Parcelable。但這是不是好的做法 –

1

我已經找到了答案。感謝一切是如何幫助我 這就是答案:

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

public class ParsedData implements Parcelable { 

    public String error; 
    public float protectionLevel; 
    public int protectionLevelColor; 
    public double lastBackup; 
    public boolean compressedType; 
    public Long statusSendTime; 
    ArrayList<Item>Items = new ArrayList<Item>(); 

    //---------------------Constructors--------------------------- 
    public ParsedData() { ; }; 

    public ParsedData(Parcel in) { 
     readFromParcel(in); 
    } 
    //------------------------------------------------------------ 

    @Override 
    public int describeContents() { 
     return 0; 
    } 
    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeString(error); 
     dest.writeFloat(protectionLevel); 
     dest.writeInt(protectionLevelColor); 
     dest.writeDouble(lastBackup); 
     dest.writeByte((byte) (compressedType ? 1 : 0)); 
     dest.writeLong(statusSendTime); 
     dest.writeList(Items); 

    } 

    private void readFromParcel(Parcel in) { 
     error = in.readString(); 
     protectionLevel = in.readFloat(); 
     protectionLevelColor = in.readInt(); 
     lastBackup = in.readDouble(); 
     compressedType =in.readByte() == 1; 
     statusSendTime = in.readLong(); 
     in.readList(Items,Item.class.getClassLoader()); 

    } 

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
        public ParsedData createFromParcel(Parcel in) { 
         return new ParsedData(in); 
        } 

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

class Item implements Parcelable { 

    public String name; 
    public float percentage; 

    //---------------------Constructors--------------------------- 
    public Item() { 
     } 
    public Item(Parcel in) { 
      readFromParcel(in); 
     } 
    //------------------------------------------------------------ 

    @Override 
    public int describeContents() { 
     return 0; 
    } 
    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeString(name); 
     dest.writeFloat(percentage); 
    } 
    public static final Creator<Item> CREATOR = new Creator<Item>() { 
      public Item createFromParcel(Parcel source) { 
      return new Item(source); 
      } 
      public Item[] newArray(int size) { 
      return new Item[size]; 
      } 
     }; 
     private void readFromParcel(Parcel in) { 
      this.name = in.readString(); 
      this.percentage = in.readFloat(); 
      } 
} 

,並在呼叫者活動

ParsedData data = new PArsedData(); 
    Intent intentBreakDown = new Intent(this,BreakDownBarActivity.class); 
    intentBreakDown.putExtra("data", data); 
    startActivity(intentBreakDown); 
在所謂的活動

(BreakDownBarActivity在我的情況)

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.breakdownbar); 

     Bundle b = getIntent().getExtras(); 
     ParsedData data = (ParsedData)b.getParcelable("data"); 
    }