数据库是保存用户信息的重要纽带 数据库分为网络数据库和本地数据库 本地数据库是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">
//谷歌新出的布局类 避免了嵌套布局 加快了运行速度
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">
网络断开 后面的数据没发送成功 就看我写的源文件吧 真的抱歉
写了一个小时的解析没了
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 );
}
} );
}
}