[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가 뜨죠?
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력