Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Parcelable创建Aidl时出错_Android_Parcelable_Aidl - Fatal编程技术网

Android 使用Parcelable创建Aidl时出错

Android 使用Parcelable创建Aidl时出错,android,parcelable,aidl,Android,Parcelable,Aidl,我以这种方式创建AIDL: 我在AIDL目录中设置了这2个文件: IMDpcService.aidl: // IMDpcService.aidl package amiin.bazouk.application.com.doproject; import amiin.bazouk.application.com.doproject.MBytes; interface IMDpcService { void setResetPassword(MBytes bytes); } MBy

我以这种方式创建AIDL:

我在AIDL目录中设置了这2个文件:

IMDpcService.aidl:

// IMDpcService.aidl
package amiin.bazouk.application.com.doproject;

import amiin.bazouk.application.com.doproject.MBytes;

interface IMDpcService {

    void setResetPassword(MBytes bytes);
}
MBytes.aidl:

package amiin.bazouk.application.com.doproject;

parcelable MBytes;
我在java目录中设置了以下java类:

MDpcService.java:

package amiin.bazouk.application.com.doproject;

import android.app.Service;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;

public class MDpcService extends Service {
    private final static String TAG = "Test-Tag";
    private Binder mBinder;

    @Override
    public void onCreate() {
        super.onCreate();
        mBinder = new MsiDpcServiceImpl(this);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    static class MDpcServiceImpl extends IMsiDpcService.Stub {

        private Context mContext;
        private DevicePolicyManager mDpm;
        private ComponentName cpntName;

        public MDpcServiceImpl(Context context) {
            mContext = context;
            mDpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
            cpntName = new ComponentName(context, DeviceOwnerReceiver.class);
        }

        @Override
        public setResetPassword(MBytes bytes){
            //do sth
        }
    }
}
MBytes.java

package amiin.bazouk.application.com.doproject;

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

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

    public MBytes() {
    }

    public MBytes(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.writeInt(_byte.length);
        dest.writeByteArray(_byte);
    }

    public void readFromParcel(Parcel in) {
        _byte = new byte[in.readInt()];
        in.readByteArray(_byte); 
    }

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

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

}
但是,我在编译时遇到以下错误:

进程命令 'C:\Users\Adrien\AppData\Local\Android\Sdk\build tools\27.0.3\aidl.exe' 以非零退出值1结束


我遗漏了什么?

在源代码中发现了两个问题,以下发现可能会有所帮助

1。在IMDpcService.aidl:,您需要提到方向标签(inoutinout) 它指示数据的流向

void setResetPassword(in MBytes bytes);
方向标志的说明

  • in-对象从客户端传输到服务,仅用于输入
  • out-对象仅从客户端传输到已使用的服务 关于产出
  • inout—对象从客户端传输到用于输入和输出的服务
2。在MBytes.java中,指定CREATOR中的类型MBytes

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

        public MBytes[] newArray(int size) {
            return new MBytes[size];
        }
    };
公共静态最终创建者
=新的Parcelable.Creator(){
公共MB创建自地块(地块位于){
返回新的兆字节(英寸);
}
公共兆字节[]新阵列(整数大小){
返回新的兆字节[大小];
}
};

参考:

在源代码中看到了两个问题,以下发现可能会有所帮助

1。在IMDpcService.aidl:,您需要提到方向标签(inoutinout) 它指示数据的流向

void setResetPassword(in MBytes bytes);
方向标志的说明

  • in-对象从客户端传输到服务,仅用于输入
  • out-对象仅从客户端传输到已使用的服务 关于产出
  • inout—对象从客户端传输到用于输入和输出的服务
2。在MBytes.java中,指定CREATOR中的类型MBytes

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

        public MBytes[] newArray(int size) {
            return new MBytes[size];
        }
    };
公共静态最终创建者
=新的Parcelable.Creator(){
公共MB创建自地块(地块位于){
返回新的兆字节(英寸);
}
公共兆字节[]新阵列(整数大小){
返回新的兆字节[大小];
}
};
参考: