[JAVA,IPC,Parcel] 안드로이드에서 Parcel을 이용해 File 객체를 AIDL로 service에 보낼 방법이 있을까요?

조회수 1429회

public class FileByteParcel implements Parcelable{ byte[] data;

//Static Methods
public static final Parcelable.Creator<FileByteParcel> CREATOR
        = new Parcelable.Creator<FileByteParcel> (){
    public FileByteParcel createFromParcel(Parcel source) {
        int size;
        size = source.readInt();
        byte[] data = new byte[size];
        source.readByteArray(data);
        return new FileByteParcel(data);
    }

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

// Constructor
public FileByteParcel(byte[] data) {
    this.data = data;
}

public byte[] getBytes() {
    return data;
}

public int describeContents() {
    return 0;
}

public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(data.length);
    dest.writeByteArray(data);
}

저의 parcel class인데 실행하면

FATAL EXCEPTION: main Process: awesomegate.rrt, PID: 12990 java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] java.lang.String.getBytes(java.nio.charset.Charset)' on a null object reference at android.os.Parcel.readException(Parcel.java:1626) at android.os.Parcel.readException(Parcel.java:1573) at awesomegate.rrt.Application.service.IMembership$Stub$Proxy.membership_file(IMembership.java:124) at awesomegate.rrt.membership.support.MembershipSupport._$nextpage_photo(MembershipSupport.java:872) at awesomegate.rrt.membership.Thir.Thir.onClick(Thir.java:69) at android.view.View.performClick(View.java:5714) at android.view.View$PerformClick.run(View.java:22589) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:7325) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

초짜는 아니라 pointer 개념은 알고있습니다. byte[] 객체는 pointer를

ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(File객체);

이렇게 줬습니다.

사용은

byte[] b = bos.toByteArray();

new FileByteParcel(b);

이런식으로 썻습니다.

왜 nullpointer가 뜨죠?

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)