2015-02-27 3 views
0

Я передаю объект в действие, реализующее Parceable, но когда я пытаюсь его получить, я получаю ошибку. Я следую за этим Android Parcelable object return Null, но я не вижу, где ошибка. Не могли бы вы мне помочь?Android: Получение ошибки при передаче объекта в действие, реализующее Parceable

Ver_Activity.java

(...) 
ArrayList<Grafico> graficos; 
(...) 
intent = new Intent(VerActivity.this, Ver_GraficosActivity.class); 
intent.putParcelableArrayListExtra("graficos", graficos); 
startActivity(intent); 

Ver_Graficos.java

public class Ver_GraficosActivity extends ActionBarActivity{ 

    private static int[] COLORS = new int[] { Color.GREEN, Color.BLUE,Color.MAGENTA, Color.CYAN }; 
    DatabaseHelper databaseHelper; 
    private CategorySeries mSeries = new CategorySeries(""); 
    private DefaultRenderer mRenderer = new DefaultRenderer(); 
    private GraphicalView mChartView; 
    private double []values=new double []{}; 
    private String []legenda=new String[]{}; 
    //ArrayList<Grafico> graficos = new ArrayList<Grafico>(){}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ver__graficos); 

    ArrayList<Grafico> graficos=getIntent().getParcelableArrayListExtra("graficos"); 

Grafico.class

public class Grafico implements Parcelable { 

    private int despesa; 
    private String categoria; 
    private double percentagem; 

    public Grafico(){} 

    public Grafico(int despesa, String categoria, double percentagem) { 
     this.despesa = despesa; 
     this.categoria = categoria; 
     this.percentagem = percentagem; 
    } 

    public Grafico(int despesa, String categoria) { 
     this.despesa = despesa; 
     this.categoria = categoria; 
    } 

    private Grafico(Parcel in) { 
     // This order must match the order in writeToParcel() 
     this.categoria = in.readString(); 
     this.despesa = in.readInt(); 
     this.percentagem = in.readDouble(); 
     // Continue doing this for the rest of your member data 
    } 

    public int getDespesa() { 
     return despesa; 
    } 

    public void setDespesa(int despesa) { 
     this.despesa = despesa; 
    } 

    public double getPercentagem() { 
     return percentagem; 
    } 

    public void setPercentagem(double percentagem) { 
     this.percentagem = percentagem; 
    } 

    public String getCategoria() { 
     return categoria; 
    } 

    public void setCategoria(String categoria) { 
     this.categoria = categoria; 
    } 

    // Just cut and paste this for now 
    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel out, int flags) { 
     out.writeInt(this.despesa); 
     out.writeString(this.categoria); 
     out.writeDouble(this.percentagem); 
    } 

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

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

Ошибка:

FATAL EXCEPTION: main Process: com.android., PID: 8317 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{.Ver_GraficosActivity}: java.lang.RuntimeException: Parcel [email protected]: Unmarshalling unknown type code 7340147 at offset 320 
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
       at android.app.ActivityThread.access$800(ActivityThread.java:144) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:135) 
       at android.app.ActivityThread.main(ActivityThread.java:5221) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at java.lang.reflect.Method.invoke(Method.java:372) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
     Caused by: java.lang.RuntimeException: Parcel [email protected]: Unmarshalling unknown type code 7340147 at offset 320 
       at android.os.Parcel.readValue(Parcel.java:2222) 
       at android.os.Parcel.readListInternal(Parcel.java:2520) 
       at android.os.Parcel.readArrayList(Parcel.java:1836) 
       at android.os.Parcel.readValue(Parcel.java:2167) 

ответ

0

Перепробовав все, я заметил, что порядок атрибутов не было правильно: Это

private Grafico(Parcel in) { 
    this.categoria = in.readString(); 
    this.despesa = in.readInt(); 
    this.percentagem = in.readDouble(); 
} 

должно быть (maintining порядок конструктора):

private Grafico(Parcel in) { 
     this.despesa = in.readInt(); 
     this.categoria = in.readString(); 
     this.percentagem = in.readDouble(); 
    } 

Это решило мою проблему.

Смежные вопросы