soul_programmer_swh——灵魂程序员的博客

不断的试练中积累经验,成为一名优秀的开发工程师。

Android基础与应用 数据存储与访问

一、实验目的

1. 掌握SharedPreferences的使用方法;

2. 掌握各种文件存储的区别与适用情况;

3. 了解SQLite数据库的特点和体系结构;

4. 掌握SQLite数据库的建立和操作方法;

5. 理解ContentProvider的用途和原理;

6. 掌握ContentProvider的创建与使用方法。

 

二、实验过程

1、简单存储

使用SharedPreferences方式在程序关闭时保存用户在图1.1的界面上输入的数据,并在程序重新启动时自动恢复这些数据。

onStart()函数中调用loadSharePreferences()函数,读取保存的信息,在onStop()函数中调用saveSharePreferences()函数,在关闭时保存界面上的信息。

代码如下:

public static final String PREFERENCE_NAME = "SaveSetting";

public static int MODE = Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE;

@Override

protected void onStart() {

super.onStart();

loadSharePreferences();

}

private void loadSharePreferences() {

SharedPreferences share = getSharedPreferences(PREFERENCE_NAME, MODE);

String name = share.getString("name", "赵明");

    . . . . . .

e1.setText(name);

   . . . . . .

}

 

@Override

protected void onStop() {

super.onStop();

saveSharePreferences();

}

 

private void saveSharePreferences() {

SharedPreferences share = getSharedPreferences(PREFERENCE_NAME, MODE);

SharedPreferences.Editor editor = share.edit();

editor.putString("name", e1.getText().toString());

. . . . . . .

editor.commit();

}

效果如图4.1所示

 

4.1 简单存储

 

 

 

2、建立存储设置界面

为图1.2设置菜单项添加一个存储设置子菜单项

res->menu布局文件下创建子菜单,效果如图4.2所示。

 

 

4.2 设置子菜单

 

创建新的Blank ActivityActivity NameLayout Name修改为有实际含义的名称,其中数据库存储是默认选择项。

Activity NameSaveActivity   Layout Nameactivity_save

如图4.3所示:


4.3 存储设置界面

 

当点击图4.2存储设置子菜单项时,则启动图4.3的存储设置界面。

代码如下:

int SUB1;

if(id==R.id.item2){

Intent intent = new Intent(MainActivity.this,SaveActivity.class);startActivityForResult(intent,SUB1);

}

 

当点击图4.3确定按钮则采用选择的存储方式保存数据,同时返回到图1.1的界面。

代码如下:

Button choose = (Button) findViewById(R.id.button1);

choose.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if(radio0.isChecked()) Saveway = "sql";

else if(radio1.isChecked()) Saveway = "inside";

else if(radio2.isChecked()) Saveway = "outside";

Uri data = Uri.parse(Saveway);

Intent result = new Intent(null,data);

setResult(RESULT_OK,result);

finish();

}

});

}

3、文件存储

当在图4.2的存储设置界面选择内部存储时,点击图1.1界面上的添加按钮则将界面上输入的数据以文件形式保存在内部存储器上。

当在图4.2的存储设置界面选择外部存储时,点击图1.1界面上的添加按钮则将界面上输入的数据以文件形式保存在外部存储器上。

 

4、数据库存储

当在图4.2的存储设置界面选择数据库存储时,将图1.1和图2.2的界面上的相关数据保存在SQLite数据库中。

(1) MainActivity中的onActivityResult()函数中获取从SaveActivity中获取的代表存储方式的变量Saveway

if(requestCode==SUB1){

if(resultCode==Activity.RESULT_OK){

Saveway = data.getData().toString();

}

}

 

2)在添加按钮的点击事件上选择存储方式,其中StudentsqlSave()

inSideSave()outSideSave()分别为数据库存储,内部存储,外部存储的函数。

代码如下:

if(Saveway.equals("sql")){

dbadapter.open();

StudentsqlSave();

}

else if(Saveway.equals("inside")){

inSideSave();

}

else if(Saveway.equals("outside")){

outSideSave();//需要注册

}else{

Toast.makeText(getApplicationContext(),"未设置存储方式", Toast.LENGTH_LONG).show();

}

 

效果如图4.44.54.6所示:

 

4.4 数据库存储        图4.5 内部存储        图4.6 外部存储

 

4.1 建立数据库

建立SQLite数据库,数据库名称自定义,并建立基本信息表(BaseInfo)和专业信息表(MajorInfo在完成建立数据库的工作后,编程实现基本的数据库操作功能,包括数据的添加、删除、更新和查询。

1)新建People

2)通过代码建库,在DBAdapter类中封装数据库的建立、打开和关闭等操作。

 

4.2 基本信息表的操作

1)添加按钮

在图1.1的界面上添加删除按钮

点击添加按钮,则把相关数据加入基本信息表中,添加成功应当给出相应提示信息,添加不成功要给出不成功原因的提示信息。添加数据的同时要调用实验三中的服务计算BMI指数。

1.在存储时为People的体质项获取服务中计算BMI的函数:

p.health =myservice.gettizhi(Double.valueOf(e3.getText().toString()),Double.valueOf(e2.getText().toString()));;

 2.在打开基本信息表的快捷菜单查看按钮的点击事件中增加:

data.putString("name",p.toString());
     3.在子Activity中接受该信息:

String msg = intent.getStringExtra("name");

 

点击删除按钮,则把基本信息表中全部数据删除,删除操作前要给出相应提示信息,确定是否删除。

代码如下:

delete.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

new AlertDialog.Builder(MainActivity.this)

.setMessage("是否确定删除?")

.setPositiveButton("确定",new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dbadapter.deleteALLDataStudent();

}

})

.setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

}).show();

}

效果如图4.7所示:


4.7 删除提示

2)添加快捷菜单项

在图1.4已有的快捷菜单基础上为4.3界面上的ListView控件对应的快捷菜单添加修改删除两个菜单项。

@Override

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {

menu.add(0, CONTEXT_MENU_1, 0, "查看");

menu.add(0, CONTEXT_MENU_2, 1, "修改");

menu.add(0, CONTEXT_MENU_3, 2, "删除");

}

效果如图4.8所示:


4.8 快捷菜单

 

点击查看菜单项则会启动图3.2的信息显示界面,此时该界面上应该显示出所选择查看项的所有字段信息。

点击修改菜单项则会根据界面上中输入的内容修改所选择项的相关数据库记录,同时更新下面的ListView控件列表,修改成功,则要给出相应提示,如果修改不成功,也要给出不成功原因的提示信息。

代码如下:

if(item.getItemId()==CONTEXT_MENU_2){

People people = new People();

people.name = e1.getText().toString();

people.height = . . . . . .

.  . . . . . .. . . . . .. . . .. . . .. . . .. . . . .. . .

long id = am.position;

long count = dbadapter.updataOneDataStudent(id, people);

if (count == -1 ){

Toast.makeText(getApplicationContext(), "修改失败", Toast.LENGTH_LONG).show();

} else {

Toast.makeText(getApplicationContext(), "修改成功", Toast.LENGTH_LONG).show();

}

list1.set(am.position, e1.getText().toString());

adapter.notifyDataSetChanged();

}

效果如图4.9所示:


4.9 修改

 

点击删除菜单项则会删除所选择项的数据库记录,同时更新下面的ListView控件列表。

代码如下:

if(item.getItemId()==CONTEXT_MENU_3){

dbadapter.deleteOneDataStduent(am.position);

Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG).show();

list1.remove(am.position);

adapter.notifyDataSetChanged();

}

效果如图4.10所示:

 

4.10  删除

 

4.3 专业信息表的操作

当点击专业设置菜单项时,则会启动专业设置界面,此时专业设置界面上应当将专业信息表中的所有专业列出来。

点击添加按钮则把EditText控件中输入的专业名称加入专业信息表,同时更新下面的ListView控件列表,如果EditText控件为空,则要给出相应提示。

b1.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if(equals(e1.getText().toString())==false){

People people = new People();

people.major = e1.getText().toString();

dbadapter.insertMajor(people);

list1.add(e1.getText().toString());

adapter.notifyDataSetChanged();

}

else{

Toast.makeText(getApplicationContext(),"输入为空", Toast.LENGTH_LONG).show();

}

}

});

 

长按专业设置界面上的ListView控件将启动对应的快捷菜单。

点击修改菜单项则会根据EditText控件中输入的内容修改所选择项的相关数据库记录,同时更新下面的ListView控件列表,如果EditText控件为空,则要给出相应提示。

onContextItemSelected()加入如下代码:

case CONTEXT_MENU_01:

if(e1.getText().toString()!=null){

People people = new People();

people.major = e1.getText().toString();

dbadapter.updataOneDataMajor(a.position, people);

list1.set(a.position, e1.getText().toString());

adapter.notifyDataSetChanged();

}else

{

Toast.makeText(getApplicationContext(),"无替换内容", Toast.LENGTH_LONG).show();

}

 

 

点击删除菜单项则删除所选择项的数据库记录同时更新下面的ListView控件列表

case CONTEXT_MENU_02:

dbadapter.deleteOneDataMajor(a.position);

list1.remove(a.position);

adapter.notifyDataSetChanged();

break;

 

 

效果如图4.114.124.13所示:

  

4.11 添加              图4.12 删除               图4.13 修改

 

 

5、数据共享

在主界面上添加一个通讯录选项菜单。点击通讯录菜单项则利用ContentProvider组件获取Android系统内置通讯录里的一条联系人信息,将该条记录的联系人姓名的姓名输入框,然后将该联系人添加到基本信息表中,同时更新界面上的ListView控件列表。

1)在res->meun中新建一个名为通讯录的选项菜单。

2)在模拟器的通讯录中新建一个联系人。

3)在onOptionsItemSelected()中为选项菜单添加事件,获取新建联系人的姓名。

代码如下:

if(id==R.id.contentprovider){//通讯录

String  result1 = null ;  

        ContentResolver cr = getContentResolver();       

        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

       if(cursor.moveToFirst())     

        {                

           result1 = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));      

        } else{

        result1 ="没有联系人";        

        }

e1.setText(result1);

StudentsqlSave();

list1.add(e1.getText().toString());

adapter1.notifyDataSetChanged();

}

阅读更多

扫码向博主提问

去开通我的Chat快问

soul_programmer_swh

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Java
  • Spring
  • Database
  • 编程思想
版权声明: https://blog.csdn.net/Soul_Programmer_Swh/article/details/80144485
个人分类: Android
想对作者说点什么? 我来说一句

Android数据存储访问

2013年01月22日 2.31MB 下载

android 存储

2012年11月07日 914KB 下载

android数据存储访问

2012年02月22日 524KB 下载

第八章_Android数据存储访问

2011年12月30日 664KB 下载

android讲义

2011年09月22日 1018KB 下载

Android_数据存储访问

2011年06月05日 44KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭