android 实战一(写入本地sql)

数据库是保存用户信息的重要纽带  数据库分为网络数据库和本地数据库 本地数据库是sqllite 是谷歌给的 

网络数据库一般由xml和json传输 可以将数据保存到本地数据库 并读取  因为谷歌给的只是在app运行的时候保存数据  他是放在运行内存中的 如果获取这些网络数据 需要在后台写入一个线程

谷歌给了一个gson用来读取json  和封装json  这里我就先讲一个简单的示例  后续会继续大家分享工作需要做的工作

我写的文章建议将要毕业 准备找工作的人群

下面示例我的软件实现简单的用输入框输入内容保存到本地数据库 并按钮点击将数据保存到数据库 textView 这个UI 控件读出数据库内容

第一个布局文件

我在这里使用了as 这个布局是谷歌新推出的布局 在复杂的布局中避免了嵌套布局

//xml的规范格式 它可以使用其他类

//谷歌新出的布局类 避免了嵌套布局  加快了运行速度

xmlns:android="http://schemas.android.com/apk/res/android"

//布局指明位置必写

 xmlns:app="http://schemas.android.com/apk/res-auto"

//可以不用写 一般现在app都是全屏设置 不再使用顶部tool

 xmlns:tools="http://schemas.android.com/tools"

//match和wrap 和dp建议大家使用  它可以根据屏幕大小自适应 

//字体用sp sp和dp都是单位大小

 android:layout_width="match_parent" 

 android:layout_height="match_parent" 

 tools:context=".MainActivity">

 

//id是每个控件的身份证  不可以相同  

//当UI控件不需要操作的时候 可以不写控件id

 android:id="@+id/button" android:layout_width="135dp" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginStart="8dp" android:layout_marginTop="376dp" 

 android:text="创建数据库" 

//按钮显示的文字 图片按钮就是由他衍生而来 可以只设置背景图片 不设置文字  

//根据自己需求设计大小

 app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toEndOf="@+id/editText" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="1.0" /> 

 

//输入框

 android:id="@+id/editText" android:layout_width="201dp" android:layout_height="46dp" android:layout_marginBottom="8dp" android:layout_marginLeft="8dp" android:layout_marginStart="8dp" android:ems="10"

//这个是一个提示的东西 当用户输入文字 自动消失

 android:hint="请输入内容" 

 android:inputType="textPersonName"

//输入框输入的种类

//可以为密码 电话 邮箱 数字等 

//也可以设置他输入内容的长度和种类

 app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" />

 

 android:id="@+id/textView"

 android:layout_width="match_parent" android:layout_height="90dp" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:text="" 

//这里textView初始是没有值的 建议写在string中 方便管理

 app:layout_constraintBottom_toTopOf="@+id/editText" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.029" />

//xml固定格式  以“/”符号结束


网络断开 后面的数据没发送成功  就看我写的源文件吧 真的抱歉

写了一个小时的解析没了


MyOpenHelper 类

package com.liziyang.dall;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.util.Log;

//导入包的名字 谷歌最近声明将不再使用v4等那种前缀  将使用androidx为前缀

public class MyOpenHelper extends SQLiteOpenHelper {

//这个类继承数据库

    public static final int VERSION=3;

//声明本软件的版本  用来版本更新 数据库改变

    //创建一张表 name不要指明类型了 会根据上下文自动判断

    private static final String CREATE_TABLE_TEST="create table Test(_id integer primary key autoincrement,name) ";

    public MyOpenHelper(Context context,//上下文

                        String name//数据库名称

                        /** SQLiteDatabase.

                        CursorFactory factory,//游标 null为默认  像图书馆查找一个知识点一样 要按顺序

                        int version//版本号*/

    ) {

//继承方法

        super( context,name,null,VERSION );

    }

//括号里为传入的参数

    public MyOpenHelper(Context context,//上下文

                        String name,//数据库名称

                      /** SQLiteDatabase.

                        CursorFactory factory,//游标 null为默认*/

                        int version//版本号

    ) {

        super( context,name,null,version );

    }


    @Override

//重写方法的标志

    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        //SQLiteDatabase数据库

        //当数据库文件不存在 创建数据库文件 并且第一次使用时调用 第一次创建数据库

        Log.i( "TEST","onCreate" );

        //创建表只需要一次

        sqLiteDatabase.execSQL( CREATE_TABLE_TEST );

    }

//谷歌安卓提供版本更新app版本 数据库更新的方法

    @Override

    public void onUpgrade(SQLiteDatabase sqLiteDatabase,int oldVersion,int newVersion) {

        //版本更新的时候

        Log.i( "TEST","onUpGrade"+"旧版本号"+oldVersion+"新版本号"+newVersion);

        //版本更新时 需要更新数据库对象(创建表)

        //sqLiteDatabase.execSQL( CREATE_TABLE_TEST );

    }

}

主java类 

package com.liziyang.dall;

import android.app.Activity;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

import android.view.inputmethod.InputMethod;

import android.view.inputmethod.InputMethodManager;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import java.io.InputStream;

public class MainActivity extends Activity {

    //SQLiteDatabase数据库

    private Button button;

    private EditText editText;

    private TextView textView;

//声明控件  其他的方法什么的也可以在这里声明

    @Override

//活动的创建方法  final是允许下面使用调用这个参数

    protected void onCreate(final Bundle savedInstanceState) {

//括号中是短暂保存数据  需要result恢复 他是放到手机内存中的 一段时间将会回收

        super.onCreate( savedInstanceState );

//继承方法

        setContentView( R.layout.activity_main );

//继承活动需要设置上下文视图  xml布局文件

        InputMethodManager imm= (InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE );

//得到系统软键盘的服务

        boolean isopen=imm.isActive();

//得到如软键盘的状态

        button=findViewById( R.id.button );

        editText=findViewById( R.id.editText );

        textView=findViewById( R.id.textView );

//绑定id

        button.setOnClickListener( new View.OnClickListener() {

//按钮设置点击监听

//基本上UI控件都有点击 长按 触摸监听

//触摸由按下 移动 松开等 

//输入框可以加入输入文字监听

            @Override

            public void onClick(View view) {

//设置textView为输入框得到的数据

                textView.setText( editText.getText().toString() );

//输入完毕  清空输入框

                editText.setText( "" );

                //输入内容后隐藏键盘

                InputMethodManager imm= (InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE );

                imm.toggleSoftInput( 0,InputMethodManager.HIDE_NOT_ALWAYS );

                //这里有三个值 上下文 数据库的名字 和版本号 这里没使用版本号 在MyOpenHelper里构造

                MyOpenHelper helper=new MyOpenHelper( MainActivity.this,"test.sql" );

                //SQLiteDatabase sqLiteDatabase=helper.getWritableDatabase();返回数据库可读写

//得到数据库的读入数据

                SQLiteDatabase sqLiteDatabase=helper.getReadableDatabase();

                //返回数据库 如果没有问题与getWritableDataBase完全相同如果磁盘空间不足 则返回的数据库为只读

//定义查询到的数据库为string类型

                String sql="insert into test(name)values('editText.getText.toString()')";

//将数据查询语句发送给手机数据库管理

                sqLiteDatabase.execSQL( sql );

            }

        } );

    }

}

你可能感兴趣的:(android 实战一(写入本地sql))