android 实战一(写入本地sql)

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

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

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

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

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

第一个布局文件

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

<?xml version="1.0" encoding="utf-8"?>

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

<android.support.constraint.ConstraintLayout 

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

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">

 <Button

//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" /> 

 <EditText

//输入框

 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" />

 <TextView 

 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固定格式  以“/”符号结束

</android.support.constraint.ConstraintLayout>

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

写了一个小时的解析没了


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 );

            }

        } );

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容