2011-09-30 34 views
0

我想問什麼,我做錯了,如果我想這樣的數據傳遞給其他類:其他活動我傳遞<?> Class對象給其他活動的載體 - 在Android的

String [] codes = {"code"}; 
Class<?> [] classes = { TestActivity.class }; 



    Intent i = new Intent(); 
    Pack p = new Pack(); 
    p.eat(classes,codes); 
    i.putExtra("com.mbar", p); 
    i.setClass(this, CaptureActivity.class); 
    startActivity(i); 

} 
} 

後來嘗試解壓這樣的:

Bundle b = getIntent().getExtras(); 
Pack p = (Pack)b.getParcelable("com.mbar"); 
if(p!=null){ 
classes = p.getClasses(); 
codes = p.getNames(); 

的包類,這是Parcelable樣子:

package com.mbar; 

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

public class Pack implements Parcelable { 
Class<?>[] classes; 
String [] codes; 

public void eat(Class<?>[] classes,String [] codes){ 
    this.classes = classes; 
    this.codes = codes; 
} 
public Class<?>[] getClasses(){ 
    return this.classes; 
} 
public String [] getNames(){ 
    return this.codes; 
} 
@Override 
public int describeContents() { 
    // TODO Auto-generated method stub 
    return 0; 
} 
@Override 
public void writeToParcel(Parcel dest, int flags) { 
} 
} 
+1

以及你的Parcelable的實現不讀或寫東西來包裹所以...這就是爲什麼類和編解碼器爲空 – Selvin

+0

第二...是我寫在我的第一(刪除)評論類是不parceable所以...你必須在writeToParcel和構造函數Pack(Parcel in)中編寫類全名,您必須讀取classnamestring並使用Class.forName(classnamestring)來重建您的Class數組 – Selvin

回答

1
String [] codes = {"code"}; 
Class<?> [] classes = { TestActivity.class }; 



    Intent i = new Intent(); 
    Pack p = new Pack(classes,codes); 
    i.putExtra("com.mbar", p); 
    i.setClass(this, CaptureActivity.class); 
    startActivity(i) 

Pack p = (Pack)getIntent().getParcelableExtra("com.mbar"); 
if(p!=null){ 
classes = p.getClasses(); 
codes = p.getNames(); 

public static class Pack implements Parcelable { 
    Class<?>[] classes; 
    String[] codes; 

    public Pack(Class<?>[] classes, String[] codes) { 
     this.classes = classes; 
     this.codes = codes; 
    } 

    public Pack(Parcel in) { 
     int len = in.readInt(); 
     String[] classnames = new String[len]; 
     in.readStringArray(classnames); 
     classes = new Class<?>[classnames.length]; 
     for (int i = 0; i < classnames.length; i++) { 
      try { 
       classes[i] = Class.forName(classnames[i]); 
      } catch (ClassNotFoundException e) { 
      } 
     } 
     len = in.readInt(); 
     codes = new String[len]; 
     in.readStringArray(codes); 
    } 

    public Class<?>[] getClasses() { 
     return this.classes; 
    } 

    public String[] getNames() { 
     return this.codes; 
    } 

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

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

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

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     String[] classnames = new String[classes.length]; 
     for (int i = 0; i < classes.length; i++) { 
      classnames[i] = classes[i].getName(); 
     } 
     dest.writeInt(classnames.length); 
     dest.writeStringArray(classnames); 
     dest.writeInt(codes.length); 
     dest.writeStringArray(codes); 
    } 
} 
相關問題