远程Service及Sqlite示例

本文提供了一个Android远程Service与SQLite数据库交互的示例,详细介绍了如何创建AIDL接口,实现数据对象Parcelable,以及在Service中操作SQLite数据库。通过远程Service,客户端可以调用服务端的方法进行数据的增删查改。
摘要由CSDN通过智能技术生成

远程Service及Sqlite示例

  1. 先创建RemoteServiceServer 远程Service服务端
  2. 新建一个aidl,并命名为IMyAidlInterface.aidl,文件里的代码如下:

// IMyAidlInterface.aidl
// 在新建的IMyAidlInterface.aidl里声明需要与Activity进行通信的方法
package com.dlrj.remoteserviceserver;
import com.dlrj.remoteserviceserver.StudentInfo;

// Declare any non-default types here with import statements

interface IMyAidlInterface {
    void AIDL_Service();
    void setStudentInfos(in List<StudentInfo> studendNames);
    void addStudentInfo(in StudentInfo studentInfo);
    List<StudentInfo> getAllStudentInfos();
    StudentInfo getStudentInfo(int id);
    int getStudentId(String studentName);
    int delete(int id, String name, String gender, int grade, int class_);
    List<StudentInfo> queryByCondition(int id, String name, String gender, int grade, int class_);
}

//AIDL中支持以下的数据类型
//1. 基本数据类型
//2. String CharSequence
//3. List  Map ,ListMap 对象的元素必须是AIDL支持的数据类型;
//4. AIDL自动生成的接口(需要导入-import
//5. 实现android.os.Parcelable 接口的类(需要导入-import)

由于我们示例中传输的数据对象继承Parcelable,所以需要另外新建一个aidl,命名为StudentInfo.aidl,并且需要定义StudentInfo为parcelable类型,注意parcelable在aidl中必须小写

// StudentInfo.aidl
package com.dlrj.remoteserviceserver;

// Declare any non-default types here with import statements

parcelable StudentInfo;

StudentInfo代码实现如下:

package com.dlrj.remoteserviceserver;

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

public class StudentInfo implements Parcelable {
    private String name;  //姓名

    private int id;   //学号

    private String gender; //性别

    private int grade; //年级

    private int class_;  //班级

    public StudentInfo() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    public int getClass_() {
        return class_;
    }

    public void setClass_(int class_) {
        this.class_ = class_;
    }


//    @Override
//    public String toString() {
//        return "book name" + name;
//    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
        dest.writeInt(id);
        dest.writeString(gender);
        dest.writeInt(grade);
        dest.writeInt(class_);
    }

    public void readFromParcel(Parcel dest) {
        name = dest.readString();
        id = dest.readInt();
        gender = dest.readString();
        grade = dest.readInt();
        class_ = dest.readInt();
    }

    protected StudentInfo(Parcel in) {
//        this.name = in.readString();
//        this.id = in.readInt();
//        this.gender = in.readString();
//        this.grade = in.readInt();
//        this.class_ = in.readInt();
        this.readFromParcel(in);
    }

    public static final Creator<StudentInfo> CREATOR = new Creator<StudentInfo>() {
        @Override
        public StudentInfo createFromParcel(Parcel source) {
            return new StudentInfo(source);
        }

        @Override
        public StudentInfo[] newArray(int size) {
            return new StudentInfo[size];
        }
    };
}

  1. 新建一个Service,并命名为MyService,并在Service里面实现对sqlite数据库的操作,代码实现如下

package com.dlrj.remoteserviceserver;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

public class MyService extends Service {

    private static final String LOG_PRINT_TAG = "MyService";

//    private List<StudentInfo> studentNames = new ArrayList<StudentInfo>();

    private DBHelper dbHelper = null;

    IMyAidlInterface.Stub mBinder = new IMyAidlInterface.Stub() {
        @Override
        public void AIDL_Service() throws RemoteException {
            Log.e(LOG_PRINT_TAG, "客户端调用了IMyAidlInterface.StubAIDL_Service方法");
            if (dbHelper == null) {
                dbHelper = new DBHelper(getApplicationContext());
            }
        }

        @Override
        public void setStudentInfos(</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值