移动应用数据存储

上传人:s****a 文档编号:167768956 上传时间:2022-11-05 格式:DOCX 页数:9 大小:96.24KB
收藏 版权申诉 举报 下载
移动应用数据存储_第1页
第1页 / 共9页
移动应用数据存储_第2页
第2页 / 共9页
移动应用数据存储_第3页
第3页 / 共9页
资源描述:

《移动应用数据存储》由会员分享,可在线阅读,更多相关《移动应用数据存储(9页珍藏版)》请在装配图网上搜索。

1、移动应用数据存储一、实验目的1了解数据存储的多种方法、数据共享的方法2掌握文件存储技术及具体应用;3SQLite 数据库存储技术及具体应用。二、实验内容在上次实验设计的“掌上微博”系统的基础上,增加如下功能:1保存登录信息在用户登录界面中增加一个复选框“记住我”。当勾选了该复选框后,系统的用户登录Activity 将保存最近的一次用户登录信息。2保存注册信息 在用户注册界面中实现注册按钮的单击事件。当单击注册按钮时,将注册信息保存在文件中,并用Toast方式将文件中的数据输出。3日志查看点击日志按钮进入日志查看页面。(1)在该页面中用ListView显示数据库中存储的每一条日志信息。具体包括:

2、日志标题、日志 的建立或修改时间,如图 1 所示。(2)以选项菜单形式提供“添加”和“删除”日志菜单项。(3)单击“删除”日志菜单项时,有对话框提示确认删除,如图2 所示。(4)单击“添加”日志菜单项时,进入日志编辑页面,该页面包括日志标题、创建或修改时间 (获取系统时间) 、日志内容、发布日志和返回按钮,如图3 所示。4保存日志信息 在日志编辑页面中单击发布日志按钮时,将当前日志信息保存在数据库中。啊哈哈2015年11月19日01:13:282015年11月19日01:19:522015年11月19日01:25:31图1图2图3三、实验步骤DBHelper DiaryD i a ryAd T

3、 Activity DiaryDao DiaryEditActivity Friends Activity LoadingActivity MainActivity Pictur 已 sActivity Reg i &t?rActi vity Setting Activity Tool首先放上总的布局文件和java文件。layoutmenu卄 mymenu.xrnl. a ctivity_fri end s .xml artivityjoading.xml artivity_main.xml a ctivity_note_a d d .xm I a ctivity_note_ed it.xm

4、I a ctivity_pi rtu res.xml a ctivity_reg i ster.xrn I a ctivity_s etti n g .xm I list_item.xml1、保存登录信息图 1- 登录界面1) 登录界面(包含 LoadingActivity.java 和 activity_loading)实现保存上一次登录信息,然后勾选上 【记住密码】,在下一次打开的时候能 够记住密码。王要使用SharedPreferences 来实现。主要代码如下(省略无关代码)在 onCreate 方法中加上restoreInfo(); /创建的时候执行protected void on

5、Stop()super.onStop();if(CB.isChecked() name=uname.getText().toString().trim();获得输入的帐号password=upassword.getText().toString().trim();获得输入的密码rememberMe(name,password);将用户的帐号与密码存入 SharedPreferencesprivate void rememberMe(String usr,String pwd)SharedPreferences.Editor editor=getSharedPreferences(data,0)

6、.edit(); editor.putString(uname,name); /放入用户名 editor.putString(upassword,password);放 入密码 mit();Overrideprotected void onDestroy() super.onDestroy();private void restoreInfo()SharedPreferences sp=getSharedPreferences(data,O); uname.setText(sp.getString(uname,); upassword.setText(sp.getString(upasswor

7、d,);2、保存注册信息图 2- 注册界面图3-Toast输出注册界面(包含 RegisterActivity.java 和 activity_register)当点击【完成注册时】,用数据流 将用户名、密码、邮箱保存到文本 中,然后用Toast方式输出,同时 跳转到登录界面。主要代码(与内容无关的自动省略):registerSubtn.setOnClickListener(new View.OnClickListener() Overridepublic void onClick(View view) /单击按钮要完成的功能str3=(用户名:+inname.getText().toStri

8、ng()+;).trim();str4=(密码:+repedres.getText().toString()+;).trim();str5=(邮箱:+email.getText().toString().trim(); if(pedres.getText().toString().equals(repedres.getText().toString()=true)try /创建写入数据流FileOutputStream fout=openFileOutput(androidremend.txt,MODE_PRIVATE); /生成 buffer 流BufferedOutputStream bu

9、fferout=new BufferedOutputStream(fout);将编辑框内容转换为byte型并写入文件中 bufferout.write(str3.getBytes(); bufferout.write(str4.getBytes(); bufferout.write(str5.getBytes();bufferout.close();/将编辑框置空/ Toast.makeText(RegisterActivity.,Toast.LENGTH_SHORT).show(); catch (Exception e) e.printStackTrace(); try /创建输出数据流

10、FileInputStream fin=openFileInput(androidremend.txt); BufferedInputStream bufferin=new BufferedInputStream(fin); /定义字节数组用于获取文件内容byte bytes=new byte50;/文件不为空则读取文件内容while (bufferin.read(bytes)!=-1)String msg=new String(bytes); /将读取的字节数组转换为字符串并显示在编辑框中 Toast.makeText(RegisterActivity.this,msg,Toast.LENG

11、TH_SHORT).show(); bufferin.close();catch (Exception e) e.printStackTrace();finish(); elseToast.makeText(RegisterActivity.this,两次密码输入不一致,请重新输入! ,Toast.LENGTH_LONG).show(););3、日志查看和保存日志信息日志显示界面(包含 activity_note_edit、list_item.xml、DiaryAddActivity.java),日志添加界面(包含 activity_note_add.xml 和 DiaryEditActivi

12、ty.java)。Handheld.microblogHandheld_microblog232018年06月 11 B 0401:26分:17秒心情不错2018年06月11日04时:41分:39秒心情不错我爱编程,编程使我快乐发布日志返回图 4- 日志显示界面图 5- 日志添加页面傍晚6:15 1-0.37K/S * 0 枣刁金N92%Handheld_micr编辑1232018年06月11日04时:26分:17秒心情不错2018年06月11日04时:41分:39秒下午4:41 0.00K/S * 0 G 上4GHandheld.microblog:jj201 806 Binn2018年06

13、删除点击【主界面】日志, 首先跳转到日志显示页 面。在日志显示页面,点 击右上角菜单,显示出 【编辑】选项,可以到 日志添加页面新建日 志;在日志标题上按住 停留一下,可以弹出【删 除】选项,删除日志。 如图4-7。DBHelper.java、Diary.java、DiaryDao.java、Tool.java 文件的代码。1) DBHelper.java:public class DBHelper extends SQLiteOpenHelper public static final String DATABASE_NAME=PocketBlog.db; public static fin

14、al int VERSION = 1;/数据库的名字,数据库的版本 public DBHelper(Context context) super(context, DATABASE_NAME, null, VERSION);/ TODO Auto-generated constructor stub 创建数据库,字段:id (主键),title, content, created;Override public void onCreate(SQLiteDatabase db) / TODO Auto-generated method stub db.execSQL(create table d

15、iary(_id integer primary key autoincrement,title varchar(20),content varchar(1000),created);/用于数据库的更新Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) / TODO Auto-generated method stub 2) Diary.java:public class Diary private Integer id;private String title;private St

16、ring content;private String datetime;public Diary() public Diary(String title,String content,String datetime)this.title = title;this.content = content; this.datetime = datetime; public Integer getId() return id;public void setld(lnteger id) this.id = id;public String getTitle() return title;public v

17、oid setTitle(String title) this.title = title;public String getContent() return content; public void setContent(String content) this.content = content;public String getDatetime() return datetime; public void setDatetime(String datetime) this.datetime = datetime;Overridepublic String toString() retur

18、n Diary title= + title + , content + content + , datetime=+ datetime + ;3) DiaryDao.java:public class DiaryDao private DBHelper dbHelper;private SQLiteDatabase sqLiteDatabase;public DiaryDao(Context context) dbHelper = new DBHelper(context);/* 添加日记* param diary*/public void save(Diary diary) String

19、sql = insert into diary(title,content,created) values(?,?,?); sqLiteDatabase = dbHelper.getWritableDatabase();sqLiteDatabase.execSQL(sql, new String diary.getTitle(), diary.getContent(), diary.getDatetime() );/* 根据 id 删除日记* param id* 日记的 id 号*/public void delete(Integer id) sqLiteDatabase = dbHelper

20、.getWritableDatabase();/ 得到的是同一个数据库实例 sqLiteDatabase.execSQL(delete from diary where _id=?, new Object id );public Cursor getAllDairies() /Diary diary = null;/List diaries = new ArrayList();sqLiteDatabase = dbHelper.getReadableDatabase();Cursor cursor = sqLiteDatabase.rawQuery(select * from diary ,

21、null); return cursor;/* 获取记录总数*/public long count() long count = 0;sqLiteDatabase = dbHelper.getReadableDatabase();Cursor cursor = sqLiteDatabase.rawQuery(select count(*) from diary , null);cursor.moveToFirst();count = cursor.getLong(0);return count;4) Tool.java:public class Tool /*时间显示样式* param dat

22、e* return*/public static String dateChange(Date date)SimpleDateFormat simpleDateFormat = new SimpleDateFormat(yyyy 年 MM 月 dd 日 hh 时:mm 分:ss 秒); return simpleDateFormat.format(date); DiaryAddAc tivity .java、DiaryEd itActivity .java 的代码1) DiaryAddActivity.java:public class DiaryAddActivity extends App

23、CompatActivity DiaryDao diaryDao = new DiaryDao(this);Button button,returnbtn;EditText editText,editText2;int id;Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedlnstanceState); setContentView(R.layout.activity_note_add);editText = (EditText) findViewById(R.id.et_diarya

24、dd);/标题editText2 = (EditText) findViewById(R.id.etO2_diaryadd);/内容 button = (Button) findViewByld(R.id.but);returnbtn=(Button) findViewByld(R.id.returnbtn);Intent intent=new Intent();intent.putExtra(id,id);button.setOnClickListener(new View.OnClickListener()Overridepublic void onClick(View view)Stri

25、ng title = editText.getText().toString();String content = editText2.getText().toString();Diary diary = new Diary(title, content, Tool.dateChange(new Date();DiaryDao diaryDao = new DiaryDao(DiaryAddActivity.this);diaryDao.save(diary);finish(););returnbtn.setOnClickListener(new View.OnClickListener()O

26、verridepublic void onClick(View view)finish(););2) DiaryEditActivity.java:public class DiaryEditActivity extends AppCompatActivity private ListView listView;private Cursor diaries;/ 游标private TextView textView = null;Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInst

27、anceState);setContentView(R.layout.activity_note_edit);listView = (ListView) findViewByld(R.id.lvnote);refreshList();this.registerForContextMenu(listView);/* 刷新 Adapter*/public void refreshList()DiaryDao diaryDao = new DiaryDao(this);diaries = diaryDao.getAllDairies();SimpleCursorAdapter simpleCurso

28、rAdapter = new SimpleCursorAdapter( DiaryEditActivity.this, R.layout.list_item, diaries, new String title, created , new int R.id.title, R.id.content);if(simpleCursorAdapter.isEmpty ()&textView=null)textView = new TextView(DiaryEditActivity.this);textView.setText (主人很懒,什么也没留下,textView.setVisibility(

29、View.GONE);(ViewGroup) listView.getParent().addView(textView); listView.setEmptyView(textView);elselistView.setAdapter(simpleCursorAdapter);Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuinfo) menu.add(0, 1, Menu.NONE,删除”);super.onCreateContextMenu(m

30、enu, v, menuinfo);Overridepublic boolean onContextItemSelected(MenuItem item) / onContextItemSelectedAdapterView.AdapterContextMenuInfo menuinfo = (AdapterView.AdapterContextMenuInfo) item .getMenuInfo();switch (item.getItemId() case 1:DiaryDao dao = new DiaryDao(DiaryEditActivity.this); dao.delete(

31、int) menuInfo.id);/menuInfo.id 与数据库的 ID 一致 refreshList();break;return super.onContextltemSelected(item);/*在退出日记添加中,利用生命周期刷新Adapter*/Overrideprotected void onResume() super.onResume();refreshList();Overridepublic boolean onCreateOptionsMenu(Menu menu) getMenuInflater().inflate(R.menu.mymenu, menu); r

32、eturn true;/*通过菜单进入“日记添加页面”*/Overridepublic boolean onOptionsitemSelected(Menuitem item) switch (item.getltemld() case R.id.add_item:Intent intent = new Intent();intent.setClass(DiaryEditActivity.this, DiaryAddActivity.class); startActivity(intent);break;return super.onOptionsItemSelected(item);activity_note_add.xml、activity_note_edit.xml、list_item.xml、mymenu.xml 布局文件代码。1) activity_note_add.xml: 2) activity_note_edit.xml:3) list_item.xml:4) mymenu.xml:menu xmlns:android=四、实验总结略

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!