南昌大学实验报告
学生姓名:夏先国学号8001511072 专业班级:软件技术112班
√设计□创新实验日期:2013-05-10实验成实验类型:□验证□综合□
绩:
一、实验项目名称
数据存储(下)
二、实验目的
掌握Android数据存储主要技术
三、实验要求
1. SQLiteProject(ContentValues封装)
2. SQLiteProject(使用SQL查询表)
四、主要仪器设备及耗材
PC 机一台,JDK,eclispce,sdk
五、实验步骤及处理结果
1. SQLiteProject(ContentValues封装)
main.xml文件代码如下:
xmlns:android="https://www.doczj.com/doc/bb5902143.html,/apk/res/a ndroid" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
Activity代码如下
MyDatabaseHelper.java代码
package org.lxh.demo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASENAME = "mldn.db" ;
private static final int DATABASERVERSION = 2 ; // 设置数据库的版本
private static final String TABLENAME = "mytab" ;
public MyDatabaseHelper(Context context) { // 用户最关心的也肯定只是Context
super(context, DATABASENAME, null, DATABASERVERSION);
}
@Override
public void onCreate(SQLiteDatabase db) { // 创建数据表
String sql = "CREATE TABLE " + TABLENAME + "("
+ "id INTEGER PRIMARY KEY ," // 在SQLite中设置为Integer、PRIMARY KEY则ID自动增长
+ "name V ARCHAR(50) NOT NULL ,"
+ "birthday DATE NOT NULL" + ")";
db.execSQL(sql) ; // 执行SQL
System.out.println("****************** 创建:onCreate()。");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "DROP TABLE IF EXISTS " + TABLENAME ;
db.execSQL(sql) ;
System.out.println("****************** 更新:onUpgrade()。");
this.onCreate(db) ;
}
}
MySQLiteDemo.java文件代码如下
package org.lxh.demo;
import android.app.Activity;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MySQLiteDemo extends Activity {
private Button insertBut = null ;
private Button updateBut = null ;
private Button deleteBut = null ;
private SQLiteOpenHelper helper = null ;
private MytabOperate mtab = null ;
private static int count = 0 ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(https://www.doczj.com/doc/bb5902143.html,yout.main);
this.helper = new MyDatabaseHelper(this);
this.insertBut = (Button) super.findViewById(R.id.insertBut) ;
this.updateBut = (Button) super.findViewById(R.id.updateBut) ;
this.deleteBut = (Button) super.findViewById(R.id.deleteBut) ;
this.insertBut.setOnClickListener(new InsertOnClickListenerImpl()) ;
this.updateBut.setOnClickListener(new UpdateOnClickListenerImpl()) ;
this.deleteBut.setOnClickListener(new DeleteOnClickListenerImpl()) ;
}
private class InsertOnClickListenerImpl implements OnClickListener{ @Override
public void onClick(View v) {
MySQLiteDemo.this.mtab = new MytabOperate(
MySQLiteDemo.this.helper.getWritableDatabase());
MySQLiteDemo.this.mtab.insert("李兴华" + count++, "1979-08-12") ;
}
}
private class UpdateOnClickListenerImpl implements OnClickListener{ @Override
public void onClick(View v) {
MySQLiteDemo.this.mtab = new MytabOperate(
MySQLiteDemo.this.helper.getWritableDatabase());
MySQLiteDemo.this.mtab.update(3, "MLDN", "1981-06-27");
}
}
private class DeleteOnClickListenerImpl implements OnClickListener{ @Override
public void onClick(View v) {
MySQLiteDemo.this.mtab = new MytabOperate(
MySQLiteDemo.this.helper.getWritableDatabase());
MySQLiteDemo.this.mtab.delete(3) ;
}
}
}
MytabOperate.java文件代码如下:
package org.lxh.demo;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
public class MytabOperate {
private static final String TABLENAME = "mytab"; // 表示要操作的数据表名称
private SQLiteDatabase db = null; // 数据库操作
public MytabOperate(SQLiteDatabase db) {
this.db = db;
}
public void insert(String name,String birthday) {
ContentValues cv = new ContentValues() ;
cv.put("name", name) ;
cv.put("birthday", birthday) ;
this.db.insert(TABLENAME, null, cv) ;
this.db.close() ;
}
public void update(int id, String name, String birthday) { ContentValues cv = new ContentValues() ;
cv.put("name", name) ;
cv.put("birthday", birthday) ;
String whereClause = "id=?" ;
String whereArgs[] = new String[]{String.valueOf(id)} ;
this.db.update(TABLENAME, cv, whereClause, whereArgs) ;
this.db.close() ;
}
public void delete(int id) {
String whereClause = "id=?" ;
String whereArgs[] = new String[]{String.valueOf(id)} ;
this.db.delete(TABLENAME, whereClause, whereArgs) ;
this.db.close() ;
}
}
实验效果截图:
2. SQLiteProject(使用SQL查询表)
main.xml文件代码如下:
xmlns:android="https://www.doczj.com/doc/bb5902143.html,/apk/res/a ndroid" android:id="@+id/mylayout" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:id="@+id/findBut" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="查询全部数据" />
Activity代码如下
MyDatabaseHelper.java文件代码
package org.lxh.demo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASENAME = "mldn.db" ;
private static final int DATABASERVERSION = 2 ; // 设置数据库的版本
private static final String TABLENAME = "mytab" ;
public MyDatabaseHelper(Context context) { // 用户最关心的也肯定只是Context
super(context, DATABASENAME, null, DATABASERVERSION);
}
@Override
public void onCreate(SQLiteDatabase db) { // 创建数据表
String sql = "CREATE TABLE " + TABLENAME + "("
+ "id INTEGER PRIMARY KEY ," // 在SQLite中设置为Integer、PRIMARY KEY则ID自动增长
+ "name V ARCHAR(50) NOT NULL ,"
+ "birthday DATE NOT NULL" + ")";
db.execSQL(sql) ; // 执行SQL
System.out.println("****************** 创建:onCreate()。");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "DROP TABLE IF EXISTS " + TABLENAME ;
db.execSQL(sql) ;
System.out.println("****************** 更新:onUpgrade()。");
this.onCreate(db) ;
}
}
MySQLiteDemo.java文件代码
package org.lxh.demo;
import android.app.Activity;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
public class MySQLiteDemo extends Activity {
private Button findBut = null ;
private SQLiteOpenHelper helper = null ;
private LinearLayout mylayout = null ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(https://www.doczj.com/doc/bb5902143.html,yout.main);
this.findBut = (Button) super.findViewById(R.id.findBut) ;
this.mylayout = (LinearLayout) super.findViewById(R.id.mylayout) ;
this.findBut.setOnClickListener(new OnClickListenerImpl()) ;
}
private class OnClickListenerImpl implements OnClickListener{ @Override
public void onClick(View v) {
MySQLiteDemo.this.helper = new MyDatabaseHelper(MySQLiteDemo.this);
ListView listView = new ListView(MySQLiteDemo.this) ;
listView.setAdapter( // 要设置数据
new ArrayAdapter
MySQLiteDemo.this, // 上下文对象
https://www.doczj.com/doc/bb5902143.html,yout.simple_list_item_1, // 列表显示的布局
new MytabCursor( // 实例化查询
MySQLiteDemo.this.helper.getReadableDatabase()) // 取得SQLiteDatabase对象
.find())); // 调用find()方法,返回List
MySQLiteDemo.this.mylayout.addView(listView) ;
}
}
}
MytabCursor.java文件代码
package org.lxh.demo;
import java.util.ArrayList;
import java.util.List;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class MytabCursor {
private static final String TABLENAME = "mytab" ;
private SQLiteDatabase db = null ;
public MytabCursor(SQLiteDatabase db) {
this.db = db ;
}
public List
List
String sql = "SELECT id,name,birthday FROM " + TABLENAME ;
Cursor result = this.db.rawQuery(sql, null); // 执行查询语句
for (result.moveToFirst(); !result.isAfterLast(); result.moveToNext()) { // 采用循环的方式检索数据
all.add("【" + result.getInt(0) + "】" + " " + result.getString(1)
+ "," + result.getString(2));
}
this.db.close() ;
return all ;
}
}
MytabOperate.java文件代码如下
package org.lxh.demo;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
public class MytabOperate {
private static final String TABLENAME = "mytab"; // 表示要操作的数据表名称
private SQLiteDatabase db = null; // 数据库操作
public MytabOperate(SQLiteDatabase db) {
this.db = db;
}
public void insert(String name,String birthday) {
ContentValues cv = new ContentValues() ;
cv.put("name", name) ;
cv.put("birthday", birthday) ;
this.db.insert(TABLENAME, null, cv) ;
this.db.close() ;
}
public void update(int id, String name, String birthday) { ContentValues cv = new ContentValues() ;
cv.put("name", name) ;
cv.put("birthday", birthday) ;
String whereClause = "id=?" ;
String whereArgs[] = new String[]{String.valueOf(id)} ;
this.db.update(TABLENAME, cv, whereClause, whereArgs) ;
this.db.close() ;
}
public void delete(int id) {
String whereClause = "id=?" ;
String whereArgs[] = new String[]{String.valueOf(id)} ;
this.db.delete(TABLENAME, whereClause, whereArgs) ;
this.db.close() ;
}
}
实验效果截图:
六、参考资料
《Android开发实战经典》李兴华主编清华大学出版社
android将数据存储到文件和从文件中读取字符串 1.读取数据(filename是读取文件的名称,reads是返回读取的字符串) private String readFile(String filename) { try { FileInputStream fis = this.openFileInput(filename); byte[] b = new byte[1024]; ByteArrayOutputStream baos = new ByteArrayOutputStream(); while (fis.read(b) != -1) { baos.write(b, 0, b.length); } baos.close(); fis.close(); reads = baos.toString(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return reads; } 2.写入保存(str是要存入的字符串,filename是保存文件的名称) private void saveFile(String str, String filename) { FileOutputStream fos; try { fos = this.openFileOutput(filename, Activity.MODE_PRIVATE); fos.write(str.getBytes()); fos.flush(); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace();
创建一个名为“登录页面”的布局文件,该文件用于展示登录信息。程序界面如下图所示:; public class Activity01 extends Activity { EditText name; EditText pass ; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); public void click(View view){ Intent intent1=new Intent(this,Mylayout1MainActivity.class); startActivity(intent1);} public void click1(View view){ SharedPreferences sf1=getSharedPreferences("account",Context.MODE_PRIVATE); String name1=sf1.getString("name",""); String pass1=sf1.getString("pass",""); String name2=name.getText().toString(); String pass2=pass.getText().toString(); if(name1.equals(name2)&&pass1.equals(pass2)){ Intent intent2=new Intent(this, Textview1.class); intent2.putExtra("name", name1);
GDOU-B-11-112广东海洋大学学生实验报告书(学生用表)实验名称实验6:数据存储与访问课程名称移动编程课程号16242215x0学院(系) 数学与计算机专业计算机科学与技术班级计科1141班学生姓名学号实验地点科技楼425 实验日期2017.4.1 一、实验目的 1.熟悉在Android Studio开发环境下编写Android应用程序的流程; 2.理解在Android Studio开发环境下进行用户界面设计的基本方法; 3.掌握应用Android碎片控件Fragment开发适用于大屏幕的应用程序的方法。 4.掌握应用Android存储方法SharePreferences的应用方法。 二、实验内容 在Android Studio开发环境下,使用Android的Fragment碎片控件、TextView文本标签控件、ListView列表控件、FrameLayout框架布局控件,利用SharePreferences存储方法,采用双页显示模式实现一个适用于大屏幕设备的简易新闻阅读器应用程序。 三、实验设备 Android Studio 四、实验结果 用户界面布局设计采用了水平线性布局方式,分为左右两个碎片Fragment;其中,左侧为新闻标题列表子界面,右侧为新闻详细内容子界面。当点击新闻标题列表中的某一标题时,右侧的Fragment将显示相应新闻标题的详细内容。
五、源代码 主Activity的布局文件activity_main.xml的源代码
基于android开发实验 报告总结 组员: 指导老师: 2016.12.15
目录 实验一 Android开发环境的搭建 (3) 1 实验目的及要求 (3) 2 实验设备(环境)及要求 (3) 3 实验内容 (3) 4 实验步骤 (3) 5 实验核心代码(关键代码),及调试中的问题 (4) 6 实验的运行结果及分析 (9) 3 实验设备(环境)及要求 (10) 实验三 GUI创建套件Widget的使用 (18) 1 实验目的及要求 (18) 2 实验设备(环境)及要求 (18) 3 实验内容 (19) 4 实验步骤 (19) 5 实验核心代码(关键代码),及调试中的问题 (19) 6 实验的运行结果及分析 (28) 实验四 SQLite应用 (29) 1 实验目的及要求 (29) 2 实验设备(环境)及要求 (30) 3 实验内容 (30) 4 实验步骤 (30) 5 实验核心代码(关键代码),及调试中的问题 (30) 6 实验的运行结果及分析 (41)
实验一 Android开发环境的搭建 1 实验目的及要求 1.搭建Eclipse+Android开发平台 2.创建简单的Android应用程序 3.创建Activity并利用intent的实现Activity的跳转 2 实验设备(环境)及要求 1)PC计算机 2)JDK安装包 3)Eclipse安装包 4)Android SDK安装包 5)ADT插件 3 实验内容 1)搭建Eclipse+Android开发环境 2)创建一个简单的”hello world”工程 3)创建两个Activity,实现简单的Activity之间的参数传递 4 实验步骤 1)下载安装JDK 1.6,配置环境变量,如果所示。
南昌航空大学实验报告 二0一4 年11 月14 日 课程名称:Android 实验名称:Android数据存储和数据访问 班级:姓名:同组人: 指导教师评定:签名: 一:实验目的 掌握SharedPreferences的使用方法; 掌握各种文件存储的区别与适用情况; 了解SQLite数据库的特点和体系结构; 掌握SQLite数据库的建立和操作方法; 理解ContentProvider的用途和原理; 掌握ContentProvider的创建与使用方法 二:实验工具 Eclipse(MyEclipse)+ ADT + Android2.2 SDK; 三:实验题目 1.应用程序一般允许用户自己定义配置信息,如界面背景颜色、字体大小和字体颜色等,尝试使用SharedPreferences保存用户的自定义配置信息,并在程序启动时自动加载这些自定义的配置信息。 2.尝试把第1题的用户自己定义配置信息,以INI文件的形式保存在内部存储器上。 3.使用代码建库的方式,创建名为test.db的数据库,并建立staff数据表,表内的属性值如下表所示:
4.建立一个ContentProvider,用来共享第3题所建立的数据库; 四:实验代码 Internal public class Internal extends Activity { private final String = ""; private TextView labelView; private TextView displayView; private CheckBox appendBox ; private EditText entryText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/bb5902143.html,yout.main); labelView = (TextView)findViewById(https://www.doczj.com/doc/bb5902143.html,bel); displayView = (TextView)findViewById(R.id.display); appendBox = (CheckBox)findViewById(R.id.append); entryText = (EditText)findViewById(R.id.entry); Button writeButton = (Button)findViewById(R.id.write); Button readButton = (Button)findViewById(R.id.read); writeButton.setOnClickListener(writeButtonListener); readButton.setOnClickListener(readButtonListener); entryText.selectAll(); entryText.findFocus(); } OnClickListener writeButtonListener = new OnClickListener() { @Override public void onClick(View v) {
Android实验报告一 姓名:丁军峰 班级:信科12-3 学号:08123448
一、实验内容 编写一个Android应用程序,实现对自己物品的管理,功能包括添加、删除和查询等 二、实验目的 了解android开发流程,掌握SQLite数据库和ListView控件的使用三、需求分析 使用SQLite数据库,使用ListView控件显示物品 四、实验过程 1.创建程序,设计用户交互界面 Android数据存储五种方式总结 本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种:使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用 程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口令密码等 核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data/ 实验01 简单Android UI设计 【实验目的】 熟悉用Eclipse开发Android简单界面,锻炼简单Java代码编写。 【实验要求】 按要求设计一个Android活动窗体,并实现其功能。 学习材料:https://https://www.doczj.com/doc/bb5902143.html,/s/1geaFkzh 【示范模仿】 实验1.1 设计一个登入窗口,在一个可编辑文本框中输入某一用户名,输入相应密码,按【确定】按钮,若用户名不是“13rg”,则显示“用户名错误”。否则,若密码不是“1234”,则显示“密码错误”。当用户名输入“13rg”并且密码输入“1234”的情况下,显示“恭喜成功,欢迎进入系统!”。 (1) 进入Eclipse开发环境 单击桌面上Eclipse快捷键,打开Eclipse环境。 (2) 创建项目 单击“File”菜单下的“New”菜单项中的“Android Application Project”子菜单项,在“New Android Application”对话框中的Application Name文本框中输入app1_1,单击Next 按钮,在出现的新的对话框中都单击Next按钮,最后一个对话框单击Finish按钮,进入设计窗体。 (3) 添加控件 首先,单击左边文件夹列表中的res文件夹,再单击其下的layout文件夹,双击其下的activity_main.xml文件。单击Graphical Layout标签,进入可视设计界面,如图1-1。 图1-1 将Form Widgets等控件列表中的控件拖曳到可视设计窗口中。分别往窗体中添加3个TextView控件textView1~textView3、2个EditText控件editText1~editText1和1个Button 控件button1。 (4) 设置控件属性 控件属性设置如表1-1所示。 表1-1 控件属性设置 设置完控件属性后,窗体中控件及其布局如图1-1所示。 (5) 添加并编写控件事件代码 单击左边src文件夹,单击其下的com.example.app1_1,单击其下的MainActivity.java 文件,进入编码界面。 输入黄色底色的代码: package com.example.app1_1; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/bb5902143.html,yout.activity_main); Button bt=(Button)findViewById(R.id.button1); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub EditText textBox1=(EditText)findViewById(R.id.editText1); EditText textBox2=(EditText)findViewById(R.id.editText2); TextView lb3=(TextView)findViewById(R.id.textView3); if (!textBox1.getText().toString().trim().equals("13rg")) Android中5种数据存储方式 1概述 SharedPreferences存储数据。 ContentProvider存储 文件存储 SQLlite存储 网络存储 Preference,File,DataBase这三种方式分别对应的目录是: ●/data/data/Package Name/Shared_Pref ●/data/data/Package Name/files ●/data/data/Package Name/database 关于这五种数据存储方式,根据实际情况选择最合适的,秉持最简单原则,也就是说能用简单的方式处理,就不要用复杂的方式。比如存储几个数据或简单对象,用SharedPreference也能做到,就没必要写个ContentProvider。 ●简单数据和配置信息,SharedPreference是首选; ●如果SharedPreferences不够用,那么就创建一个数据库; ●结构化数据,一定要创建数据库,虽然这稍显烦锁,但是好处无穷; ●文件就是用来存储文件(也即非配置信息或结构化数据),如文本文件,二进制文件,PC文件, 多媒体文件,下载的文件等等; ●尽量不要创建文件; ●如果创建文件,如果是私密文件或是重要文件,就存储在内部存储,否则放到外部存储。 2SharedPreferences存储数据 SharedPreferences 可以将数据保存到应用程序的私有存储区,这些存储区中的数据只能被写入这些数据的软件读取。 它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。 其存储位置在/data/data/<包名>/shared_prefs 目录下。 使用SharedPreferences是有些限制的:只能在同一个包内使用,不能在不同的包之间使用。 例如:登录用户的用户名与密码。 步骤如下: (1)使用Activity类的getSharedPreference 方法获得SharePreferences对象。其中存储key-value 的文件名称由getSharedPreferences方法的第一个参数指定;第二个参数表示所创建的数据文件的访问权限(“MODE_WORLD_READABLE”表示其他用户有“读”的权限; “MODE_WORLD_WRITEABLE ” 表示其他用户有“写”权限;MODE_PRIVATE 和 MODE_APPEND创建的文件对其他用户都是不可访问的); (2)使用SharedPreferences 接口的edit 获得SharedPreferences.Editor对象; (3)通过Sharedreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示value 不同数据类型。例如,Boolean类型的value需要用putBoolean方法,字符串类型的value需要用putString方法; (4)通过Sharedreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作,只有在事务结束后进行提交,才会将数据真正保存在数据库中。保存key-value也是一样,在使用putXxx方法指定了key-value对后,必须调用commit方法才能将key-value对真正保存在相应的文件中。 实验二 android基本控件实验 【目的】 熟悉Android常用控件的基本操作,掌握它们的基本使用方法。了解控件之间的构成关系,熟悉适配器的使用原理。 【要求】 1、了解控件的继承关系; 2、掌握适配器的使用; 3、掌握信息提示的实现机制; 4、实现基本界面。 【原理】 1.控件类之间的关系 android.view.View类(视图类)呈现了最基本的UI构造块。View类是Android中的一个超类,几乎包含了所有的屏幕类型,主要负责绘制和事件处理。 Android中控件类的扩展结构如图所示。 View有众多的扩展者,它们大部分是在android.widget包中,这些继承者实际上就是Android 系统中的“控件”。View实际上就是各个控件的基类,创建交互式的图形用户界面的基础。View的直接继承者包括文本视图(TextView)、图像视图(ImageView)、进度条(ProgressBar)等。它们各自又有众多的继承者。每个控件除了继承父类功能之外,一般还具有自己的公有 方法、保护方法、XML属性等。 在Android中使用各种控件的一般情况是在布局文件中可以实现UI的外观,然后在Java文件中实现对各种控件的控制动作。控件类的名称也是它们在布局文件XML中使用的标签名称。 2.控件通用行为和属性 View是Android中所有控件类的基类,因此View中一些内容是所有控件类都具有的通用行为和属性。 提示:由于Java语言不支持多重继承,因此Android控件不可能以基本功能的“排列组合”的方式实现。在这种情况下,为了实现功能的复用,基类的功能往往做得较强,作为控件的祖先类,View所实现的功能也是最多的。 控件类经常在布局文件中使用,因此其可以使用XML属性(XMLAttributes),和Java代码经常具有对应关系。 View作为各种控件的基类,其XML属性所有控件通用,XML属性及其对应的方法如表1所示。 表1 View中的XML属性及其对应的方法 其中,android:id表示控件的标识,通常需要在布局文件中指定这个属性。View中与控件标识相关的几个方法如下所示: public int getId() // 获得控件的id(int类型) Android数据存储框架GreenDao 3.0使用详解 GreenDao 3.0 的使用 1.简介 简单的讲,GreenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM 解决方案。(GreenDaois a light & fast ORM solution that maps objects to SQLite databases.) 2.使用 2-1.导入相关的包 compile 'org.greenrobot:greendao:3.2.0' 2.2.配置(Module) greendao { schemaVersion 1 //数据库版本 daoPackage 'com.lee.codeplus.db' //默认生成的包名 targetGenDir 'src/main/java' //根目录 } 2.3.在build.gradle(Project)中进行配置 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' } } 3.使用 3.1 实体类的创建 @Entity public class ArticleFile { @Id private Long id; private String Category; private String author; private String createdAt; private String objectId; private String postType; private String textContent; private String updatedAt; private String webUrl; } 山西大学 物理电子工程学院 论文题目:基于Android系统的GPS 程序开发 学号:* 姓名:* * * 指导老师:* * 摘要 在日常生活中,我们经常需要知道自己的具体位置,尤其是在 旅游或陌生城市中。而手机作为目前最常见、最方便的电子信息载体,无疑是我们最好的选择。为了让智能手机用户能够随时随地查询GPS 所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端上。本文选择的是最常见的Android系统的程序开发。对于软件从业人员来说,该平台具有无限的吸引力。 因此,本文首先介绍安卓系统在个人计算机上开发平台的搭建,并尝试在安卓系统上开发一款基于手机自带GPS组件的GPS应用。 关键字:Android,GPS,SDK,JDK,ADT,Eclipse 一引言 (一)开发背景 随着网络世界的深入生活,地球网络化已经是一条必然之路。而今后的网络也将逐渐的走向移动互联网的轨道。像手机,平板计算机,笔记本计算机等可以搭乘移动互联网的产品中使用人数最多的数码产品便是智能手机了。它已经在逐步的取代其他的电子产品的市场份额。据《2013-2017年中国智能手机行业市场需求预测与投资战略规划分析报告》估算,2012前三季度,全球智能手机用户总数已经突破了10亿大关。而2011前三季度的用户量只有约7亿户。可以看出,智能手机市场的潜力不可估量。 (二)Android 与GPS 简介 1.Android 是一种基于Linux 的自由及开放源代码的操作系统,主要使用于移动设 备,如智能手机和平板计算机,由Google 公 司和开放手机联盟领导及开发。 2011年第一季度,Android 在全球的市场份额首次超过塞班系统,跃居全球第一。 2012年11月数据显示,Android 占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。 Android 的系统架构和其操作系统一 样,采用了分层的架构。从架构图看, Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运 行库层和Linux 内核层。 Android 系统所具有的特点有:开放性、丰富的硬件、方便开发。 2.GPS 是英文Global Positioning System (全球定位系统) 的简称。GPS 起始于1958年美国军方的一个项目, 1964年投入使用。GPS 定位的基本原理是根据高速运动的卫星瞬间位置作为已知的起算数据,采用空间距离后方交会的方法,确定待测点的位置。GPS 由空间部分、地面控制系统、用户设备部分三部分组成。作为先进的测量手段和新的生产力,GPS 已经融入了国民经济建设、国防建设和社会发展的各个应用领域。GPS 技术与我们的日常生活日益相关。 SharedPreferences: Activity之间的数据传递除了通过intent来传递外,还可以使用SharedPreferences来共享数据。 SharedPreferences是一种轻量级数据存储方式,能够实现不同应用程序间数据共享。 SharedPreferences使用键值对(Key-Value)的方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下自己定义的xml文件中。 私有目录是:/data/data/应用程序包名/shared_prefs/ SharedPreferences编程: (1)写入数据: //获得SharedPreferences对象(如果不存在则新建) SharedPreferences sp = getSharedPreferences(名称,访问模式); //名称是:SharedPreferences数据保存的XML文件名 //获得可编辑对象 SharedPreferences.Editor editor = sp.edit(); editor.putString(“Name”,”abc”); //p ut方法写数据(key-value) //一定要提交才能保存 https://www.doczj.com/doc/bb5902143.html,mit(); (2)读取数据: //获得SharedPreferences对象(如果不存在则新建) SharedPreferences sp = getSharedPreferences(名称, 访问模式); String name = sp.getString("Name", "DefaultVal"); //get方法读数据//第2个参数:在无法获取值的时候使用的缺省值 SharedPreferences支持的三种访问模式: ?MODE_PRIVATE (=0,私有):仅创建SharedPreferences的程序有 权限对其进行读取或写入。 ?MODE_WORLD_READABLE (=1,全局读):创建程序可以对其进 行读取或写入,其它应用程序只具有读取操作的权限,但没有写入操作的权限。 ?MODE_WORLD_WRITEABLE (=2,全局写):所有程序都可以对其 进行写入操作,但没有读取操作的权限。 SQLite数据库: Android 在运行时(run-time)集成了SQLite,所以每个Android 应用程序都可以使用SQLite 数据库。 SQLite特点: ?SQLite是一款开源的、轻量级的、嵌入式的、关系型数据库。 ?普通数据库的管理系统比较庞大和复杂,会占用了较多的系统 资源,轻量级数据库SQLite的特点: Android实验报告 专业:计算机科学与技术 班级: 学号: 姓名:武易 2016年11月28日 实验一Activity 生命周期 一、实验目的 Android 生命周期是从程序启动到程序终止的过程。通过本次实验深入理解Android 系统管理生命周期的必要性,并以Activity 为例说明Android 系统是如何管理程序组件的生命周期。 二、实验设备 1、硬件设备系统类型:Win7 版本32 位,处理器: Intel(R)Core(TM)i3-2350M CPU @2.30GHz 2.30GHz 安装内存 (RAM):8.00GB 2、软件设备Win7 操作系统、Eclipse、JDK、Android SDK、ADT 三、实验内容 1、实验要求 观察Activity的生命周期。 2、详细设计 public class MainActivity extends ActionBarActivity { private static String TAG="LIFECYCLE"; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Log.i(TAG,"(1) onCreate()"); button.setOnClickListener(new View.OnClickListener(){ public void onClick(View view){ finish(); } }); } @Override public void onStart(){ super.onStart(); Log.i(TAG,"(2) onStart()"); } @Override public void onRestoreInstanceState(Bundle savedInstanceState){ super.onRestoreInstanceState(savedInstanceState); Log.i(TAG,"(3) onRestoreInstanceState()"); } @Override 在Android中,提供了三种数据存储的途径,和两种存储方式。 三种途径: l 系统配置(Shared Preferences): 这类应用主要是系统的配置信息的保存,比如我给程序界面设置了颜色,我想在下一次启动时还是能够保留上次设置的颜色。由于Android系统的界面是采用Activity栈的形式,在系统资源不足时,会收回一些界面,那么,我想有些操作也是需要在不活动时保留下来的,等再次激活时能够显示出来。 l 文件(Files) Android是一个操作系统,自然而然对存储系统会有一个管理,因为采用提Linux核心,所有在Andorid系统中,文件也是Linux的形式。当然我们的应用程序也就可以把数据以文件的形式记录下来咯。 l 数据库(SQLite Databases) 在Andriod系统中,也少不了一个数据库管理,但考虑到系统资源(内存,硬盘),选择了轻便型的数据库SQLite,这是一个开源的关系型数据库,与普通关系型数据库一样,也具有ACID的特性。 两种存储方式: 主要是根据数据库共享方式来分 l 程序内自用: 通常我们程序中需要的数据一般都是为本程序来用,所以我们用上面三种途径来创建的程序都是默认为本程序使用,其他程序无法获取操作。 我们ADB插件功能在命令行下输入:adb shell 来进入手机的文件系统,进入CD /data/data 目录。然后ls查看,我们发现,我们在系统中安装的每个程序在这里都有一个文件夹,再次进入我们的程序后ls查看,会出现几个目录:shared_prefs、files、databases,这几个目录其实就是存的我们程序内自用的数据,内容分别就是由上面三种途径创建的,当然如果没有创建过,这个目录可能不存在。 l 数据需要共享: 这类数据通常是我们的一些共用数据,很多程序都会来调用,比如电话薄数据,就不可能存为私有的了。当然,这种方式的话,上面三种途径中的系统配置就不适用了,“系统配置” 【sharePreferences】共享参数: 概念:SharedPreferences是Android系统提供的一个通用的数据持久化框架, 用于存储和读取key-value类型的原始基本数据类型对,目前支持String、int、long、float、boolean等基本类型的存储,对于自定义的对象数据类型,无法 使用SharedPreferences来存储。 他通常以xml文件方式存储在data文件夹中,文件存储路径: /data/data/{appPackageName}/shared_prefs/{filename} SharedPreferences主要用于存储系统的配置信息。例如上次登录的用户名, 上次最后设置的配置信息(如:是否打开音效、是否使用振动,小游戏的玩家 积分等)。当再次启动程序后依然保持原有设置。SharedPreferences用键值对方式存储,方便写入和读取。 注:SharePreferenced本身的对象不能对数据进行存储和修改,只能获取到数据,是通过Editor的实例化对象对数据进行存储和修改。 常用方法 1.Context.getSharedPreferences(String, int mode) mode的属性值有: Context.MODE_PRIVATE:指定该SharedPreferences的数据只能 被本应用程序读、写 Context.MODE_APPEND:新内容追加到原内容后 Context.MODE_WORLD_READABLE: 指定 SharedPreferences数据 能被其他应用程序读,但是不支持写 Context.MODE_WORLD_WRITEABLE: 指定 SharedPreferences数据 能被其他应用程序读、写会覆盖原数据; 可以使用"+"连接这些权限 2.contains(String key) 3.Map 计算机科学与技术系 实验报告 专业名称计算机科学与技术 课程名称 Android嵌入式软件开发 项目名称 Android 定位服务 班级 学号 姓名 同组人员无 实验日期 2016.10.25 一、实验目的与要求: 【实验目的】 掌握 Android 定位服务方法 【实验要求】 1、练习使用 LocationManager 进行定位服务 【实验原理】 LocationManager, LocationProvider, Location 二、实验内容 1、电脑连接网络; 2、新建 Android 应用程序项目 LocationTest; 3、业务逻辑代码与界面布局文件:activity_main.xml、MainActivity.java; 4、在 AndroidManifest.xml 中声明权限; 5、在模拟器上运行项目,点击下图中红框内的按钮,在弹出的百度地图中输入某个地址,并点击“修改地址”,观察 LocationTest 中显示的经纬度变化。 实验结果截图: 图表 1 地图定位界面 图表 2 获得定位经纬度信息 三、实验分析与小结: Android GPS:需要GPS硬件支持,直接和卫星交互来获取当前经纬度,这 种方式需要手机支持GPS模块(现在大部分的智能机应该都有了)。通过GPS方式准确度是最高的,但是它的缺点也非常明显:1,比较耗电;2,绝大部分用户默认不开启GPS模块;3,从GPS模块启动到获取第一次定位数据,可能需要比较长的时间;4,室内几乎无法使用。这其中,缺点2,3都是比较致命的。需要指出的是,GPS走的是卫星通信的通道,在没有网络连接的情况下也能用。 【思考题】 【1】Android定位的两种方式? GPS、网络 【2】Android定位的3个API Location、LocationProvider、LocationManager 得分(百分制)Android数据存储五种方式总结(DOC)
Android基础实验
Android中5种数据存储方式
实验二 android基本控件实验
Android数据存储框架GreenDao 3.0使用详解
Android程序开发实验报告
安卓学习之数据存储与访问
Android实验报告
android数据存储
安卓数据存储详解-孙霞霞著
Android实验八