2012-07-29 12 views
17
import android.os.Parcel; 
import android.os.Parcelable; 

public class MClass implements Parcelable { 
    private byte[] _byte; 

    public MClass() { 
    } 

    public MClass(Parcel in) { 
     readFromParcel(in); 
    } 


    public byte[] get_byte() { 
     return _byte; 
    } 

    public void set_byte(byte[] _byte) { 
     this._byte = _byte; 
    } 

    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeByteArray(_byte); 
    } 

    public void readFromParcel(Parcel in) { 
     in.readByteArray(_byte); //LOE - Line Of Exception 
    } 

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

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

} 

जब भी मैं अपने निम्न सरणी यह ​​NullPointerException के अपवाद के लौटने में बाइट्स पुनः प्राप्त करने के लिए जा रहा हूँ। क्या कोई कह सकता है कि समस्या क्या है? मैं जो करने की कोशिश कर रहा हूं वह डाउनलोड की गई छवि बाइट्स को एक गतिविधि से दूसरे में स्थानांतरित करना है।पार्सल के माध्यम से bytearray स्थानांतरित कर रहा है देता है NullPointerException

उत्तर

62

पार्सल पढ़ने पर आप _byte सरणी को कभी भी प्रारंभ नहीं करते हैं, इसलिए यह शून्य है।

मैं क्या करता हूं, जब आप अपना पार्सल लिखते हैं, बाइट सरणी की लंबाई को वास्तविक बाइट सरणी के बाद स्टोर करें। जब आप पार्सल पढ़ते हैं, तो पहले लंबाई पढ़ें और अपनी _byte सरणी को उस आकार की एक नई सरणी में प्रारंभ करें, फिर बाइट सरणी में पढ़ें।


कोड टिप्पणी

लिखने में से चले गए ...

dest.writeInt(_byte.length); 
dest.writeByteArray(_byte); 

और पढ़ने में ...

_byte = new byte[in.readInt()]; 
in.readByteArray(_byte); 
+0

आप की तरह कुछ मतलब है: (में पार्सल) सार्वजनिक शून्य readFromParcel { _byte = नए बाइट [length_of_byte]; in.readByteArray (_byte); } – Debopam

+2

लिखने में ... 'dest.writeInt (_byte.length); dest.writeByteArray (_byte); 'और पढ़ने में ... '_byte = new बाइट [in.readInt()]; in.readByteArray (_byte); ' –

+0

ठीक है .. मुझे जांचने दें .. – Debopam

7

बाइट सरणियों लंबाई भंडारण के बिना एक छोटा समाधान:

dest.writeByteArray(byteArray); 
byteArray = in.createByteArray();