Android学习中关于SQLite的一个小Demo(数据库的创建、数据的增删查改) - Go语言中文社区

Android学习中关于SQLite的一个小Demo(数据库的创建、数据的增删查改)


最近学习Android,做了一些小的东西,一直没有时间做个总结。经常总结对于学习新东西是很好的,说以今天整理一下自己做的东西,希望这样也有助于其他人学习。

我做的是一个基于Android平台,使用SQLite构建数据库,并且创建表来存储数据,还会涉及到数据的增删查改。整体的效果图如下:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

上面就是Demo在调试时的几幅图,下面将会一一介绍这个Demo中用到的一些核心技术。

首先就是用到了SQLiteOpenHelper这个类,通过创建一个自己的帮助类来继承这个抽象类,来实现简单的对数据库创建和升级。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。SQLiteOpenHelper中有两个非常重要的实例方法,getReadableDatabase()和getWritableDatabase()。这两个方法都可以创建和打开一个现有的数据库(如果数据库已经存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadabelDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则会出现异常。

MyDatabaseHelper.java

public class MyDatabaseHelper extends SQLiteOpenHelper {

    private static final String CREATE_TABLE = "create table peopleinfo (_id integer primary key autoincrement,name text not null,age integer,height float);";
    private Context mContext;

    public MyDatabaseHelper(Context context, String name,
            CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists peopleinfo");
        onCreate(db);
    }

}

“drop table if exists peopleinfo”这句代码的作用就是当发现数据库中已经存在peopleinfo表,就将这两个表删除掉 ,然后调用onCreate()方法去重新创建。

构建People用来存储输入的People信息,方便向数据库中存储。

People.java

public class People {

    public int ID;
    public String Name;
    public int Age;
    public float Height;

    public int getID() {
        return ID;
    }

    public void setID(int iD) {
        ID = iD;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public int getAge() {
        return Age;
    }

    public void setAge(int age) {
        Age = age;
    }

    public float getHeight() {
        return Height;
    }

    public void setHeight(float height) {
        Height = height;
    }

    @Override
    public String toString(){
        String result = "";
        result += "ID:" + this.ID + ",";
        result += "姓名:" + this.Name + ",";
        result += "年龄:" + this.Age + ", ";
        result += "身高:" + this.Height ;
        return result;
    }
}

activity_main.xml:主界面的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_margin="10dp">
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="姓名:"
            android:textSize="23sp"/>
    <EditText 
        android:id="@+id/edt_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入姓名"/>
    </LinearLayout>
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp">
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="年龄:"
            android:textSize="23sp"/>
        <EditText 
            android:id="@+id/edt_age"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:numeric="integer"
            android:hint="请输入年龄"/>
    </LinearLayout>
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp">
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="身高:"
            android:textSize="23sp"/>
        <EditText 
            android:id="@+id/edt_height"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:numeric="decimal"
            android:hint="请输入身高"/>
    </LinearLayout>
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:orientation="horizontal">
        <Button 
            android:id="@+id/bt_adddata"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="添加数据"
            android:textSize="12sp"
            android:layout_weight="1"/>
        <Button 
            android:id="@+id/bt_showalldata"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="全部显示"
            android:textSize="12sp"
            android:layout_weight="1"/>
        <Button 
            android:id="@+id/bt_clearshowdata"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="清除显示"
            android:textSize="12sp"
            android:layout_weight="1"/>
        <Button 
            android:id="@+id/bt_deletealldata"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="全部删除"
            android:textSize="12sp"
            android:layout_weight="1"/>
    </LinearLayout>
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:layout_marginRight="10dp"
        android:orientation="horizontal">
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ID:"
            android:textSize="23sp"/>
        <EditText 
            android:id="@+id/edt_id"
            android:layout_width="40dp"
            android:layout_height="wrap_content"
            android:numeric="integer"
            android:layout_weight="1"/>
        <Button 
            android:id="@+id/bt_deteleid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ID删除"
            android:textSize="12sp"
            android:layout_weight="1"/>
        <Button 
            android:id="@+id/bt_queryid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ID查询"
            android:textSize="12sp"
            android:layout_weight="1"/>
        <Button 
            android:id="@+id/bt_updateid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ID更新"
            android:textSize="12sp"
            android:layout_weight="1"/>
    </LinearLayout>
    <TextView 
        android:layout_margin="10dp"
        android:id="@+id/txt_sjk"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="数据库:"
        android:textSize="23sp"/>
    <ListView 
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:id="@+id/listview_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

MainActivity.java

public class MainActivity extends Activity implements OnClickListener {

    private MyDatabaseHelper dbHelper;
    private SQLiteDatabase db;
    private EditText edt_Name;
    private EditText edt_Age;
    private EditText edt_Height;
    private EditText edt_Id;
    private Button bt_AddData;
    private Button bt_ShowAllData;
    private Button bt_ClearShowData;
    private Button bt_DeleteAllData;
    private Button bt_DeleteById;
    private Button bt_QueryById;
    private Button bt_UpdateById;
    private ListView listview_show;
    private String strName = "";
    private String strAge = "";
    private String strHeight = "";
    private int m_Id;
    private List<People> PeopleList = new ArrayList<People>();
    private MyAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbHelper = new MyDatabaseHelper(this, "people.db", null, 1);
        db = dbHelper.getWritableDatabase();

        // 初始化控件
        initShow();

        // 添加数据
        bt_AddData.setOnClickListener(this);
        // 全部显示
        bt_ShowAllData.setOnClickListener(this);
        // 清楚显示
        bt_ClearShowData.setOnClickListener(this);
        // 全部删除
        bt_DeleteAllData.setOnClickListener(this);
        // ID删除
        bt_DeleteById.setOnClickListener(this);
        // ID查询
        bt_QueryById.setOnClickListener(this);
        // ID更新
        bt_UpdateById.setOnClickListener(this);
    }

    // 初始化控件
    private void initShow() {
        edt_Name = (EditText) findViewById(R.id.edt_name);
        edt_Age = (EditText) findViewById(R.id.edt_age);
        edt_Height = (EditText) findViewById(R.id.edt_height);
        edt_Id = (EditText) findViewById(R.id.edt_id);
        bt_AddData = (Button) findViewById(R.id.bt_adddata);
        bt_ShowAllData = (Button) findViewById(R.id.bt_showalldata);
        bt_ClearShowData = (Button) findViewById(R.id.bt_clearshowdata);
        bt_DeleteAllData = (Button) findViewById(R.id.bt_deletealldata);
        bt_DeleteById = (Button) findViewById(R.id.bt_deteleid);
        bt_QueryById = (Button) findViewById(R.id.bt_queryid);
        bt_UpdateById = (Button) findViewById(R.id.bt_updateid);
        listview_show = (ListView) findViewById(R.id.listview_show);
    }

    // listview显示数据库数据
    private void showData() {
        mAdapter = new MyAdapter(MainActivity.this,
                android.R.layout.simple_list_item_1, PeopleList);
        listview_show.setAdapter(mAdapter);
    }

    // 获取edittext中输入的ID
    public int getEd_ID() {
        if (!edt_Id.getText().toString().equals("")) {
            String strId = edt_Id.getText().toString();
            m_Id = Integer.parseInt(strId);
        } else {
            m_Id = -1;
        }
        return m_Id;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        // 添加数据
        case R.id.bt_adddata:
            addData();
            edt_Name.setText("");
            edt_Age.setText("");
            edt_Height.setText("");
            break;
        // 全部显示
        case R.id.bt_showalldata:
            showAllData();
            showData();
            break;
        // 清楚显示
        case R.id.bt_clearshowdata:
            clearListView();
            showData();
            break;
        // 全部删除
        case R.id.bt_deletealldata:
            deleteData();
            showData();
            break;
        // ID删除
        case R.id.bt_deteleid:
            m_Id = getEd_ID();
            deleteById(m_Id);
            showAllData();
            showData();
            edt_Id.setText("");
            break;
        // ID查询
        case R.id.bt_queryid:
            m_Id = getEd_ID();
            queryById(m_Id);
            showData();
            edt_Id.setText("");
            break;
        // ID更新
        case R.id.bt_updateid:
            m_Id = getEd_ID();
            updateById(m_Id);
            showData();
            edt_Id.setText("");
            break;

        }

    }

    // ID更新
    private void updateById(int mId) {
        if (mId == -1) {
            Toast.makeText(MainActivity.this, "请输入ID号", Toast.LENGTH_SHORT)
                    .show();
        } else {
            // 先找到这条数据
            db = dbHelper.getReadableDatabase();
            final People people = new People();
            List<People> tempList=new ArrayList<People>();
            Cursor cursor = db.query("peopleinfo", null, "_id" + "=" + mId,
                    null, null, null, null);
            if (cursor.moveToFirst()) {
                do {
                    int id = cursor.getInt(cursor.getColumnIndex("_id"));
                    String name = cursor.getString(cursor
                            .getColumnIndex("name"));
                    int age = cursor.getInt(cursor.getColumnIndex("age"));
                    float height = cursor.getFloat(cursor
                            .getColumnIndex("height"));
                    people.setID(id);
                    people.setName(name);
                    people.setAge(age);
                    people.setHeight(height);
                    tempList.add(people);
                } while (cursor.moveToNext());
            }
            cursor.close();
            if (tempList.size()==0) {
                Toast.makeText(MainActivity.this, "数据库中没有这条信息",
                        Toast.LENGTH_SHORT).show();
            } else {
                // 弹出自定义的AlertDialog
                LayoutInflater factory = LayoutInflater.from(this);
                final View textChangeView = factory.inflate(R.layout.custom,
                        null);
                final EditText editTextName = (EditText) textChangeView
                        .findViewById(R.id.cEdt_name);
                final EditText editTextAge = (EditText) textChangeView
                        .findViewById(R.id.cEdt_age);
                final EditText editTextHeight = (EditText) textChangeView
                        .findViewById(R.id.cEdt_height);

                editTextName.setText(people.getName());
                editTextAge.setText(Integer.toString(people.getAge()));
                editTextHeight.setText(Float.toString(people.getHeight()));

                AlertDialog.Builder ad = new AlertDialog.Builder(
                        MainActivity.this);
                ad.setTitle("ID更新:");
                ad.setIcon(android.R.drawable.ic_dialog_info);
                ad.setView(textChangeView);
                ad.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                ContentValues updateValues = new ContentValues();
                                strName = editTextName.getText().toString();
                                strAge = editTextAge.getText().toString();
                                strHeight = editTextHeight.getText().toString();
                                int iAge = Integer.parseInt(strAge);
                                float fHeight = Float.parseFloat(strHeight);
                                // 开始组装一条数据
                                updateValues.put("name", strName);
                                updateValues.put("age", iAge);
                                updateValues.put("height", fHeight);
                                db.update("peopleinfo", updateValues, "_id"
                                        + "=" + people.getID(), null);
                                Toast.makeText(MainActivity.this, "更新成功",
                                        Toast.LENGTH_SHORT).show();

                                Cursor cursor = db.query("peopleinfo", null, "_id" + "=" + people.getID(),
                                        null, null, null, null);
                                PeopleList.clear();
                                if (cursor.moveToFirst()) {
                                    do {
                                        int id = cursor.getInt(cursor.getColumnIndex("_id"));
                                        String name = cursor.getString(cursor
                                                .getColumnIndex("name"));
                                        int age = cursor.getInt(cursor.getColumnIndex("age"));
                                        float height = cursor.getFloat(cursor
                                                .getColumnIndex("height"));
                                        people.setID(id);
                                        people.setName(name);
                                        people.setAge(age);
                                        people.setHeight(height);
                                        PeopleList.add(people);
                                    } while (cursor.moveToNext());
                                }
                                cursor.close();
                            }
                        });
                ad.setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {

                            }
                        });
                ad.show();
            }
        }
    }

    // ID查询
    private void queryById(int mId) {
        if (mId == -1) {
            Toast.makeText(MainActivity.this, "请输入ID号", Toast.LENGTH_SHORT)
                    .show();
        } else {
            db = dbHelper.getReadableDatabase();
            People people = new People();
            PeopleList.clear();
            Cursor cursor = db.query("peopleinfo", null, "_id" + "=" + mId,
                    null, null, null, null);
            if (cursor.moveToFirst()) {
                do {
                    int id = cursor.getInt(cursor.getColumnIndex("_id"));
                    String name = cursor.getString(cursor
                            .getColumnIndex("name"));
                    int age = cursor.getInt(cursor.getColumnIndex("age"));
                    float height = cursor.getFloat(cursor
                            .getColumnIndex("height"));
                    people.setID(id);
                    people.setName(name);
                    people.setAge(age);
                    people.setHeight(height);
                    PeopleList.add(people);
                } while (cursor.moveToNext());
            }
            cursor.close();
            if (PeopleList.size() == 0) {
                Toast.makeText(MainActivity.this, "数据库中没有这条数据",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }

    // ID删除
    private void deleteById(int mId) {
        if (mId == -1) {
            Toast.makeText(MainActivity.this, "请输入ID号", Toast.LENGTH_SHORT)
                    .show();
        } else {
            db = dbHelper.getWritableDatabase();
            People people = new People();
            PeopleList.clear();
            Cursor cursor = db.query("peopleinfo", null, "_id" + "=" + mId,
                    null, null, null, null);
            if (cursor.moveToFirst()) {
                do {
                    int id = cursor.getInt(cursor.getColumnIndex("_id"));
                    String name = cursor.getString(cursor
                            .getColumnIndex("name"));
                    int age = cursor.getInt(cursor.getColumnIndex("age"));
                    float height = cursor.getFloat(cursor
                            .getColumnIndex("height"));
                    people.setID(id);
                    people.setName(name);
                    people.setAge(age);
                    people.setHeight(height);
                    PeopleList.add(people);
                } while (cursor.moveToNext());
            }
            cursor.close();
            if (PeopleList.size() == 0) {
                Toast.makeText(MainActivity.this, "数据库中没有这条数据",
                        Toast.LENGTH_SHORT).show();
            } else {
                db.delete("peopleinfo", "_id" + "=" + mId, null);
                Toast.makeText(MainActivity.this, "成功删除" + mId + "这条数据",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }

    // 全部删除
    private void deleteData() {
        db = dbHelper.getWritableDatabase();
        db.delete("peopleinfo", null, null);
        PeopleList.clear();
        Toast.makeText(MainActivity.this, "数据清除成功", Toast.LENGTH_SHORT).show();
    }

    // 清除显示
    private void clearListView() {
        PeopleList.clear();
    }

    // 全部显示
    private void showAllData() {
        PeopleList.clear();
        Cursor cursor = db.query("peopleinfo", null, null, null, null, null,
                null);
        if (cursor.moveToFirst()) {
            do {
                People people = new People();
                // 遍历表
                int id = cursor.getInt(cursor.getColumnIndex("_id"));
                String name = cursor.getString(cursor.getColumnIndex("name"));
                int age = cursor.getInt(cursor.getColumnIndex("age"));
                float height = cursor.getFloat(cursor.getColumnIndex("height"));
                people.setID(id);
                people.setName(name);
                people.setAge(age);
                people.setHeight(height);
                PeopleList.add(people);
            } while (cursor.moveToNext());
        }
        cursor.close();
        if (PeopleList.size() == 0) {
            Toast.makeText(MainActivity.this, "数据库中没有数据", Toast.LENGTH_SHORT)
                    .show();
        }
    }

    // 添加数据
    private void addData() {
        if (edt_Name.getText().toString().equals("")
                && edt_Age.getText().toString().equals("")
                && edt_Height.getText().toString().equals("")) {
            AlertDialog.Builder dialog = new AlertDialog.Builder(
                    MainActivity.this);
            dialog.setTitle("Warn");
            dialog.setMessage("请输入完整信息");
            dialog.setCancelable(false);
            dialog.setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            edt_Name.setText("");
                            edt_Age.setText("");
                            edt_Height.setText("");
                        }
                    });
            dialog.show();
        } else {
            ContentValues values = new ContentValues();
            strName = edt_Name.getText().toString();
            strAge = edt_Age.getText().toString();
            strHeight = edt_Height.getText().toString();
            int iAge = Integer.parseInt(strAge);
            float fHeight = Float.parseFloat(strHeight);
            // 开始组装一条数据
            values.put("name", strName);
            values.put("age", iAge);
            values.put("height", fHeight);

            // 插入数据
            db.insert("peopleinfo", null, values);
            Toast.makeText(MainActivity.this, "数据添加成功", Toast.LENGTH_SHORT)
                    .show();
        }
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        // TODO Auto-generated method stub
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {

            // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
            View v = getCurrentFocus();

            if (isShouldHideInput(v, ev)) {
                hideSoftInput(v.getWindowToken());
            }
        }
        return super.dispatchTouchEvent(ev);
    }

    /**
     * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
     * 
     * @param v
     * @param event
     * @return
     */
    private boolean isShouldHideInput(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] l = { 0, 0 };
            v.getLocationInWindow(l);
            int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left
                    + v.getWidth();
            if (event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom) {
                // 点击EditText的事件,忽略它。
                return false;
            } else {
                return true;
            }
        }
        // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
        return false;
    }

    /**
     * 多种隐藏软件盘方法的其中一种
     * 
     * @param token
     */
    private void hideSoftInput(IBinder token) {
        if (token != null) {
            InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            im.hideSoftInputFromWindow(token,
                    InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }
}

custom.xml:自定义布局文件 ,用在ID更新时弹出的AlertDialog中。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="姓名:"
            android:textSize="23sp" />

        <EditText
            android:id="@+id/cEdt_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入姓名" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="年龄:"
            android:textSize="23sp" />

        <EditText
            android:id="@+id/cEdt_age"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入年龄"
            android:numeric="integer" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="身高:"
            android:textSize="23sp" />

        <EditText
            android:id="@+id/cEdt_height"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入身高"
            android:numeric="decimal" />
    </LinearLayout>

</LinearLayout>

这个Demo还是很简单的,我就不做过多的解释了 。各位看了之后,有什么见解欢迎留言交流交流共同进步。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u010715434/article/details/45723917
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-19 13:37:54
  • 阅读 ( 863 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢