移动应用开发 安卓

应试安卓备考

一二章不重要

第三章

安卓中的长度单位

安卓中的颜色

基础控件基础属性

id表达方法

layout_weight和layout_height

margin外边距

padding内边距

控件的单位

•px:像素(pixels),即屏幕上的像素点,1px代表占据一个像素点。

•dp:独立像素(deviceindependentpixels),这是我们使用最多的一种单位,一般来说我们在布局文件中定义控件的宽高等属性时都会使用它。它是一种能够自动适应不同屏幕密度的单位,在160dpi的屏幕上,1dp=1px。由于Android碎片化严重,使用它作为长度单位可以适配不同的屏幕密度。

•sp:比例像素(scaledpixels),我们定义字体大小的时候,一般都会使用sp作单位。sp除了能够像dp一样可以适应屏幕密度的变化,还可以随着系统字体的大小设置改变作出变化。如果产品经理不想文字随着手机设置中字体的大小发生改变(例如标题),可以使用dp代替。**

一般用dp,字体用sp,避免用px。

dpi:

image-20220618212024251

颜色-RGB/ARGB

表示

ARGB依次代表透明度(Alpha)、红色(Red)、绿色(Green)、蓝色(Blue),取值范围为0255(即16进制的0x000xff)

定义方法

image-20220618212539266

image-20220618212545037设置颜色

image-20220618212732770

基础控件:要注意引用控件时前面的android:不能丢

TextView
概念

TextView是用于显示文字(字符串)的控件,可在代码中通过设置属性改变文字的大小、颜色、样式等功能。

常用属性
layout_height设置textview控件的高度
layout_height设置TextView控件的宽度
text显示文本
textColor文本颜色
textSize字体大小
gravity文本位置,如设置为center,文本将居中显示

要注意引用控件时前面的android:不能丢

要注意id的定义方式为id="@+id/xxx"

image-20220618213107177

EditText
概念

EditText继承自TextView,与TextView不同的是用户可以在设备上对EditText进行编辑操作,将用户信息传递给Android程序。还可以为EditText控件设置监听器,用来测试用户输入的内容是否合法。

基本属性

EditText是继承TextView的,所以TextView的属性基本都有。

image-20220618214201335

Button
概念

Button是按钮,是用于响应用户的一系列点击事件,使程序更加流畅和完整。

常用属性

image-20220619134019932

线性布局

线性布局(LinearLayout)主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次为从上到下。

image-20220619135129069

当控件水平排列时,控件属性layout_width只能设置为wrap_content(包裹内容让当前控件根据控件内容大小自动伸缩),不能设置为match_parent(填充父窗体由父容器大小决定控件大小)否则其余控件会被挤出屏幕右侧不显示。同理,如果控件垂直排列也会出现同样情况。

当控件水平排列时,如果控件未占满一行,会留有空白区域,这样既不美观又浪费空间。此时,可以利用layout_weight属性解决这个问题,该属性被称为权重,通过比例调整布局中所有控件的大小。

注意:当控件使用权重属性时,布局宽度属性值通常设置为0。

常用属性

image-20220619135426425

权重实例:

image-20220619135919308

image-20220619135911925

相对布局

重点要了解padding和margin,和网页一样的。

简单的理解,padding是内边距,margin是外边距。

盒子模型

image-20220619140445110

实例:

image-20220619140548362

image

解释:

在RelativeLayout布局标签中通过paddingBottom属性指定布局与屏幕底部边距为20dp

“按钮1”通过layout_alignParentBottom属性指定当前控件位于布局底端,通过这两个属性的控制,“按钮1”的位置距离屏幕底部20dp

“按钮2”通过layout_centerHorizontal属性指定它在父布局中水平居中,通过layout_marginTop属性指定当前控件上边缘与父布局顶部距离260dp

“按钮3”通过layout_alignBottom属性指定它与“按钮2”底部对齐,通过layout_marginBottom属性指定距离“按钮2”底部100dp,通过layout_toRightOf属性指定当前按钮在“按钮2”的右边

第四章(重点中的重点)

资源引用

创建activity

生命周期生命周期函数主要看onCreate,其他的要知道什么时机

启动方式(两种intent)四种加载模式不重要

Activity数据传递(intentExtra属性)

Intent属性:categorydataactionextra

Activity

每个界面都有一个Activity,但不是每个Activity都是一个界面,有一些是为了使用创建的工具类。

image-20220619143540041

资源引用

R.java:一个系统生成的资源类

在Android的程序结构中,会生成一个目录res,用于存放Android程序所用到的所有资源,例如图片、布局文件、字符串等

res目录中的文件会被映射到一个名为R.java的文件中

在程序中引用资源时,就可以通过R.内部类.资源id来引用资源

image-20220619142434263

Androidmainfest.xml:清单文件

安卓中创建四大组件都需要在该文件中进行注册。因为AS很智能,会自动注册,所以只需要了解。

如创建ActivityExample,会自动添加一行代码:

<activityandroid:name=".ActivityExample"/>

image-20220619142434263

Activity的创建

publicclassActivityExampleextendsAppcompatActivity{			//创建一个类继承Activity(现在多用AppcompatActivity)
	@override													//重写onCreate方法
	protectedvoidonCreate(BundlesavedInstanceState)	{		//该方法在创建时调用,通常放一些控件的初始化代码
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_example);
	}
}
==============================================================================================================
Activity是通过调用setContentView()方法来显示指定组件的。
该方法既可以接收View对象为参数,也可以接收布局文件对应的资源id为参数。

Activity的生命周期

生命周期生命周期函数主要看onCreate,其他的要知道什么时候调用

概念:
生命周期就是一个对象从创建到销毁的过程,每一个对象都有生命周期。

同样,Activity也具有相应的生命周期,Activity的生命周期中分为5种状态。

Activity有四种(有的书上是五种)生命周期状态,对应有7个不同的生命周期方法:

四种状态
Activity表现为四种状态:		

1.活动状态Active:Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互。

2.暂停状态Pause:Activity在界面上被部分遮挡,不再处于用户界面的最上层,且不能够与用户进行交互。(如弹出选择框时)

3.停止状态Stop:Activity被其他Activity全部遮挡,界面完全不能被用户看到。(如玩游戏时来电了)

4.非活动状态Dead:Activity没有启动或者被finish()。			//安卓开发者平台上写的是killed

//多的一种是启动状态
启动状态:Activity的启动状态很短暂,一般启动之后就进入运行状态。(过渡状态)

运行状态:当Activity在屏幕的最前端时,它是可见的、有焦点的。

暂停状态:Activity对用户来说仍然是可见的,但它不再拥有焦点。(可见不可用)

停止状态:当Activity完全不可见时,它就处于停止状态,但仍然保留着当前状态和成员信息。(不可见)

销毁状态:当Activity处于销毁状态,将被清理出内存。(过渡状态)

image-20220619144234345

七种生命周期方法

书上这个图感觉比较舒服

image-20220619144958430

publicclassMyActivityextendsActivity{
protectedvoidonCreate(BundlesavedInstanceState);
protectedvoidonStart();
protectedvoidonRestart();
protectedvoidonResume();
protectedvoidonPause();
protectedvoidonStop();
protectedvoidonDestroy();
}

image-20220619144217058

周期函数调用时机
onCreate()创建时调用
onStart()启动时调用
onResume()Activity在前台可交互时调用,比如关闭子页面重获焦点
onPause()失去焦点时调用,比如打开子页面,这时候还是可见的
onStop()不可见时调用
onDestroy()被销毁时调用
onRestart()从停止状态再次启动时调用,比如多个Activity切换时
示例代码
onCreate()
@Override							//其实就是创建activity
protectedvoidonCreate(BundlesavedInstanceState){
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	}								
================================================================================================================
帮助理解:(不准确)
Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的。
在Activity中还有一种onSaveInstanceState()机制,用于保存状态,比如让你返回HOME后再打开,页面不发生改变。这个不在Activity的生命周期中,因为并不一定会被触发。
简单理解BundlesavedInstanceState其实就是传了一个状态参数,这个参数里面存有Activity运行时的状态,可能有点像快照吧
其他的

如:onStart()

@Override							//其他都一样,换个单词
protectedvoidonStart(){
	super.onStart();
	}
Intent(意图)组件
概念
Intent中文翻译为“意图”,它是Android程序中各个组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。

Intent一般用于启动Activity、启动服务、发送广播等,承担了Android应用程序三大核心组件(Activity、Service、BroadcastReceiver)相互间的通信功能。
Intent的主要属性

建议看ppt P44开始

主要看Action,Data,Category和Extra

属性设置属性方法获取属性方法含义
ActionsetAction()getAction()动作Action:用于指定Intent对象的动作。
DatasetData()getData()数据Data:执行动作的URI和MIME类型
CategoryaddCategory()getCategories()类别Category:指明一个执行Action的分类
TypesetType()getType()
ComponentsetComponent()setClass()setClassName()getComponent()
ExtraputExtra()getXXXExtra()获取不同数据类型的数据,如int类型则使用getIntExtra(),字符串则使用getStringExtra()getExtras()获取Bundle包额外值Extra:是一个Bundle对象,实现对数据的存储

说明:没有特殊操作时,Category的属性值一般设置为android.intent.category.DEFAULT

Activity的启动方式

其实就是Intent中的显式意图和隐式意图。

image-20220619152131495

示例代码:

显式意图:
Intentintent=newIntent(this,Activity02.class);			//创建Intent对象
startActivity(intent);										//开启Activity02
隐式意图:
Intentintent=newIntent();
//设置action动作,该动作需要和清单文件中设置的一样
intent.setAction("cn.itcast.START_ACTIVITY");
intent.addCategory("android.intent.category.DEFAULT");		//可以不写,默认就是这个
startActivity(intent);

上面的代码并不能做到隐式启动activity,我们还需要在清单文件中声明对应的<intent-filter>标签

<activityandroid:name="cn.itcast.Activity02">
	<intent-filter>
		<!-设置action属性,需要在代码中根据所设置的name打开指定的组件->
		<actionandroid:name="cn.itcast.START_ACTIVITY"/>
		<categoryandroid:name="android.intent.category.DEFAULT"/>
	</intent-filter>
</activity>
Activity间的数据传递

通过Intent的Extra进行传递。

Intent提供了一系列重载的putExtra(Stringname,Stringvalue)方法,通过该方法可以将要传递大的数据暂存到Intent中,当启动另一个Activity后,只需将这些数据取出即可。

示例代码:

为某个Intent对象添加键名为name的字符串类型的附加数据:

intent.putExtra(“name”,”lisan”);

则获取此对象附加信息中的名为name数据信息代码为:

intent.getStringExtra(“name”);

一个get一个put

将Activity01中的字符串传递给Activity02中
Intentintent=newIntent(this,Activity02.class);				//通过Intent开启Activity02
intent.putExtra("extra_data","HelloActivity02");				//用putExtra()方法传递了一个字符串
startActivity(intent);											
在Activity02中取出传递的数据
Intentintent=getIntent();									//通过getIntent方法获取了Intent对象
Stringdata=intent.getStringExtra("extra_data");				//调用getStringExtra(Stringname)取出数据

第五章 ConstraintLayout约束布局

PPT也不长,最好整个扫一下,大概了解一下。

标签属性都不用看,卷子会给,可能要求写一点界面?

老师的PPT就是这篇博客:约束布局ConstraintLayout看这一篇就够了-简书(jianshu.com),一点没变,觉得PPT太乱的看这个。

注意:ConstraintLayout中的属性是app:开头的

image-20220619200455521

第六章

spinner

适配器

6.6

Spinner

下拉列表框

示例代码

image-20220619201303593

image-20220619201258038

image-20220619201315162

运行实例

image-20220619201324131

PPT例2:
<!======================================================================layout/main.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"				所有组件垂直摆放
	android:layout_width="fill_parent"				布局管理器宽度为屏幕宽度
	android:layout_height="fill_parent">			布局管理器高度为屏幕高度
	<TextView						定义文本显示组件		android:id="@+id/info_city"				定义此组件ID,程序中使用
		android:text="请选择您喜欢的城市:"			定义组件的显示文字
		android:layout_width="fill_parent"			组件的宽度为屏幕宽度
		android:layout_height="wrap_content"/>			组件的高度为文字高度
	<Spinner						定义下拉列表组件
		android:id="@+id/mycity"				定义此组件ID,程序中使用
		android:prompt="@string/city_prompt"		定义提示信息strings.xml中定义
		android:layout_width="wrap_content"			组件的宽度为文字宽度
		android:layout_height="wrap_content"			组件的高度为文字宽度
		android:entries="@array/city_labels"/>			定义使用的文本资源
</LinearLayout>

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"			所有组件垂直摆放
	android:layout_width="fill_parent"			布局管理器宽度为屏幕宽度
	android:layout_height="fill_parent">		布局管理器高度为屏幕高度
	<TextView					定义文本显示组件
		android:id="@+id/info_color"			定义此组件ID,程序中使用
		android:text="请选择您喜欢的颜色:"		定义组件的显示文字
		android:layout_width="fill_parent"		组件的宽度为屏幕宽度
		android:layout_height="wrap_content"/>		组件的高度为文字高度
	<Spinner					定义下拉列表组件
		android:id="@+id/mycolor"			定义此组件ID,程序中使用
		android:layout_width="wrap_content"		组件的宽度为文字宽度
		android:layout_height="wrap_content"/>		组件的高度为文字高度
</LinearLayout>

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"			所有组件垂直摆放
	android:layout_width="fill_parent"			布局管理器宽度为屏幕宽度
	android:layout_height="fill_parent">		布局管理器高度为屏幕高度
	<TextView					定义文本显示组件
		android:id="@+id/info_edu"			定义此组件ID,程序中使用
		android:text="请选择您学历:"			定义组件的显示文字
		android:layout_width="fill_parent"		组件的宽度为屏幕宽度
		android:layout_height="wrap_content"/>		组件的高度为文字高度
	<Spinner					定义下拉列表组件
		android:id="@+id/myedu"			定义此组件ID,程序中使用
		android:layout_width="wrap_content"		组件的宽度为文字宽度
		android:layout_height="wrap_content"/>		组件的高度为文字高度
</LinearLayout>


<!==================================================编写Activity程序——MyView.java
publicclassMySpinnerDemoextendsActivity{
	privateSpinnerspiColor=null;			//定义表示颜色的列表框
	privateSpinnerspiEdu=null;			//定义表示学历的列表框
	privateArrayAdapter<CharSequence>adapterColor=null;	//下拉列表内容适配器
	privateArrayAdapter<CharSequence>adapterEdu=null;	//下拉列表内容适配器
	privateList<CharSequence>dataEdu=null;		//集合保存下拉列表选项
	@Override
	publicvoidonCreate(BundlesavedInstanceState){
		super.onCreate(savedInstanceState);		//父类onCreate()方法
		super.setContentView(R.layout.main);		//调用布局管理器
		this.spiColor=(Spinner)super.findViewById(R.id.mycolor);//取出组件
		this.spiColor.setPrompt("请选择您喜欢的颜色:");	//定义提示信息
		this.adapterColor=ArrayAdapter.createFromResource(this,
				R.array.color_labels,
				android.R.layout.simple_spinner_item);	//从资源文件读取选项
		this.adapterColor.setDropDownViewResource(
				android.R.layout.simple_spinner_dropdown_item);	//设置列表显示风格
		this.spiColor.setAdapter(this.adapterColor);	//设置下拉列表选项
		this.dataEdu=newArrayList<CharSequence>();	//实例化List集合
		this.dataEdu.add("大学");			//设置选项内容
		this.dataEdu.add("研究生");		//设置选项内容
		this.dataEdu.add("高中");			//设置选项内容
		this.spiEdu=(Spinner)super.findViewById(R.id.myedu);	//取得下拉列表框
		this.spiEdu.setPrompt("请选择您喜欢的学历:");		//设置提示信息
		this.adapterEdu=newArrayAdapter<CharSequence>(this,
				android.R.layout.simple_spinner_item,this.dataEdu);//定义下拉列表项
		this.adapterEdu.setDropDownViewResource(
				android.R.layout.simple_spinner_dropdown_item);	//设置下拉列表显示风格
		this.spiEdu.setAdapter(this.adapterEdu);		//设置下拉列表选项
	}
}

MVC模型

image-20220619204642557

Model:通常可以理解为数据,负责执行程序的核心运算与判断逻辑,通过view获得用户输入的数据,然后根据从数据库查询相关的信息,最后进行运算和判断,再将得到的结果交给view来显示

view:用户的操作接口,说白了就是GUI,应该使用哪种接口组件,组件间的排列位置与顺序都需要设计

Controller:控制器,作为model与view之间的枢纽,负责控制程序的执行流程以及对象之间的一个互动

Adapter则是中间的这个Controller的部分:Model(数据)—>Controller(以什么方式显示到)—>View(用户界面)

ListView

一个列表视图,由很多Item组成,每个Item的布局都是相同的。

AndroidlistViewLayout

ListView的常用属性

为了显示我们要显示的Item的值,我们需要对其进行数据绑定,这里就用到了Adapter。

使用Adapter进行绑定的方法:

实例化一个Adapter

image-20220619212547927

控件与适配器绑定

image-20220619212529738

Adapter

在使用ListView控件时需要进行数据适配,这样界面才会显示数据。在进行数据适配时会用到数据适配器,所谓数据适配器就是数据与视图之间的桥梁,类似一个转换器,将复杂的数据转换成用户可以接受的方式进行呈现。

下面是几种常见的数据适配器

1.BaseAdapter
概念

最基本的适配器,实际上就是一个抽象类。通常在使用自定义适配器的时候需要继承BaseAdapter。为了实现我们想要的数据显示方式,我们通常自定义一个适配器继承该适配器,实现我们想要的效果。所以BaseAdapter用的最多。

下面另两个适配器可以理解成安卓给ListView的两种预设方案。

方法

一般有四个抽象方法,有两个是比较重要的:getCount()和getView()

方法功能
publicintgetCount()得到Item的条目
publicViewgetView(intposition,ViewconvertView,ViewGroupparent)得到position对应的Item视图,position是当前Item的位置,convertView用于复用旧视图,parent用于加载XML布局

注意,这个抽象方法要自己重写实现,不是直接用的

复用convertView

PPT里有提到复用convertView来优化getView,我猜其实就是把publicViewgetView(intposition,ViewGroupparent)写成publicViewgetView(intposition,ViewconvertView,ViewGroupparent),也就是SimpleAdapter里封装好的getView方法。

image-20220619212106602

代码可能LIKE:

image-20220619212937916

PPT还提到一个ViewHolder重用组件进行优化

image-20220619213035604

image-20220619213039670

2.SimpleAdapter

同样具有良好扩展性的一个Adapter,可以自定义多种效果

SimpleAdapter继承自BaseAdapter,实现了四种抽象方法并进行了封装,所以用SimpleAdapter进行数据适配时,只需要在构造方法里传入相应的参数。

3.ArrayAdapter

支持泛型操作,最简单的一个Adapter,只能展现一行文字

下面是PPT里一些常用的参数

image-20220619212318059

第七章

重点了解事件监听和handle

事件回调

事件监听(主要是匿名内部类)

基于监听的事件处理模型的编程步骤如下:

获取普通界面组件(事件源),也就是被监听的对象。

实现事件监听器类,该监听器类是一个特殊的Java类,必须实现一个XxxListener接口。

调用事件源的setXxxListener方法将事件监听器对象注册给普通组件。

当事件源上发生指定事件时,Android会触发事件监听器,由事件监听器调用相应的方法(事件处理器)来处理事件。

基于监听的事件处理是一种“面向对象”的事件处理,主要涉及如下三个对象。

EventSource(事件源):事件发生的场所,通常就是各个组件,例如窗口、按钮、菜单等。

Event(事件):事件封装了界面组件上发生的特定事情,通常是一次用户操作,如果程序需要获得界面组件上所发生事件的相关信息,一般通过Event对象来取得。

EventListener(事件监听器):负责监听事件源所发生的事件,并对各种事件作出相应的响应。

匿名内部类

image-20220619215544256

使用内部类

image-20220619215616207

handle消息机制

有点难懂感觉,PPT差不多都在底下,自己理解把。

应用程序启动时,安卓系统会开启一个UI主线程,这个线程负责管理UI界面的控件,并进行事件分发。

在主线程中绑定了Handler对象,并在事件触发时创建子线程用于某些耗时操作,当子线程工作完成,会向Handler发送一个已完成信号,Handler接收到信号,就会更新UI。

理想案例:

输入一个文件地址,点击按钮即可将该图片在UI上显示。

实现:

创建一个URL对象,在button的点击事件中分配一个子进程,通过该URL对象获取HttpURLConnection对象,最后将返回流输出在UI上。

如果子进程获取成功,会给Handler对象一个更改UI的Message,然后Handler把这个Message发送给主线程,更改UI。

//我也不知道我写的是啥,看PPT把

image-20220619222041541

image-20220619222058454

image-20220619222107974

第八章(了解)

跳过

第九章

启动方式startService和bindService自启动和绑定生命周期差异P165

主要了解两个的区别,估计是简答吗?

服务的生命周期:

服务的启动方式有两种:startService()方法和bindService()方法。他们有着不同的生命周期,如下:

startService()方法:自启动方法/非绑定方法

bindService()方法:绑定方法

image-20220619224340754

简单介绍这些方法:

方法含义
onCreate()第一次创建服务时执行的方法
onDestory()服务被销毁时执行的方法
onStartCommand()客户端自启动方法启动服务时执行该方法
onBind()客户端调用绑定方法启动服务执行该方法
onUnbind()客户端调用unBindService()方法断开服务时执行的方法

※※※※※※※

通过startService()方法启动服务,执行的生命周期方法为onCreate()onStartCommand(),然后服务处于运行态。直到调用stopSelf()或者其他组件调用stopService()方法,服务才停止,最后被系统销毁。

通过startService()方法启动服务,服务会长期运行在后台,并且服务的状态与开启组件的状态无关,即使开启服务的组件销毁,服务也会继续运行。所以该方法可以长期启动服务。

通过bindService()方法启动服务,执行的生命周期方法为onCreate()onBind(),然后服务处于运行态。直到调用unBindService()时,服务被解绑,调用onUnbind()方法,最后被系统销毁。

当一个组件通过该方法启动服务,服务会与组件绑定。组件被销毁时,服务也会被销毁。通常用在短暂开启某些服务时。

PPT如下:

image-20220619224821697

image-20220619224827232

image-20220619224832976

第十章

主要是SharedPreferences和ContentProvide

代码考察不多

五个存储方式的使用场景和主要差异

ContentProvider重要

10.2.SharedPreferences

概念:

SharedPreferences是Android提供的用来存储一些简单的配置信息的一种机制。采用XML格式将数据存储到设备中。

SharedPreferences中的value值只能是Float、Int、Long、Boolean、String、StringSet类型数据。

SharedPrefernces对象本身只能获取数据,并不支持数据的存储和修改,数据的存储和修改需要通过SharedPrefernces.Editor()对象实现,要获取Editor实例对象,需要调用SharedPrefernces.Editor.editor()方法。

常用的方法

image-20220619230238868

存取过程

1.通过context.getSharedPreferences()方法获得SharedPreferences对象,参数依次为生成的配置文件名,切忌不要写上文件尾!!!只写文件名就可以了,另外后面那个是操作模式,和前面文件学的操作模式类似,同时是有四种方式,只是前面多个Context而已

2.调用ed.edit()获得Editor对象

3.调用editor对象的putXxx(),将不同类型的数据写入,参数是键值对的形式!

4.完成上述步骤后,此时的数据依旧是在内存当中,需要做最后一步,调用commit()方法,提交数据,就是提交数据到xml文件中

存储数据示例代码
//获取sp对象,参数data表示文件名,MODE_PRIVATE表示文件操作模式
SharedPreferncessp=getSharedPreferences(“data”,MODE_PRIVATE);

SharedPrefernces.Editoreditor=sp.edit();//获取编辑器

editor.putString(“name”,“CSTG_寅子”);//存入String类型数据

editor.putInt(“age”,8);//存入int类型数据

editor.commit();//提交修改
获取数据示例代码
SharedPreferncessp=getSharedPrefernces("data",MODE_PRIVATE);
Stringdata=sp.getString("name","");		//获取用户名,第二个值为缺省值,如果sp中不存在该key,返回缺省值

image-20220619230421625

image-20220619230658982

image-20220619230710068

10.3ContentProvide

这一段有五十多张PPT,自己看吧。。

概念

ContentProvide(内容提供者)是安卓四大组件之一,功能是在不同程序之间实现数据共享。

ContentProvide是不同应用程序之间进行数据共享的标准API,如果想要访问ContentProvider中共享的数据,就一定要借助ContentResolver类,该类的实例需要通过Context中的getContentResolver()方法获取。

ContentProvider是不同应用程序之间进行数据交换的标准API,以Uri形式对外提供数据,允许其他应用操作本应用数据。其他应用则使用ContentResolver,并根据ContentProvider提供的Uri操作指定数据。

是应用程序之间共享数据的一种接口机制,是一种更为高级的数据共享方法,可以指定需要共享的数据,而其他应用程序则可在不知道数据来源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作

概念:

image-20220619232533996

过程:

image-20220619232153638

可以看出,A应用需要使用ContentProvider暴露数据,才能被其他应用操作。

B应用必须通过ContentResolver操作A应用暴露出来的数据,而A应用会将操作结果返回给ContentResolver然后ContentResolver再将操作结果返回给B应用。

URI

image-20220619232650529

image-20220619232655206

创建过程

1.定义子类继承ContentProvide抽象类

2.重写一系列增删改查的方法,对数据进行操作

3.声明CONTENT_URI,实现UriMatcher

4.在清单文件中进行注册

image-20220619233023671

image-20220619233016518

image-20220619231456023

使用

应用通过ContentProvide共享数据,ContentResolver对共享的数据进行操作。ContentResolver起一个中介的作用。

image-20220619233157529

五个存储方式的使用场景和主要差异总结

文件存储是一种较常用的方法,与Java中的文件存储类似,是通过I/O流的形式存储数据到手机内存、SD卡。可以存储大数据,如文本、图片、音频等。

SharedPreferences是Android提供的用来存储一些简单的配置信息的一种机制。采用XML格式将数据存储到设备中。

SQLite数据库:结构化数据

SQLite是一个轻量级数据库,比传统数据库更适合用于嵌入式系统占用资源少,运行高效可靠,可移植性强提供了零配置(zero-configuration)运行模式.

网络存储(PPT里没介绍):需要与网络数据包打交道,将数据存储在服务器上,通过网络提供的存储空间来存储/获取数据信息,存储一些在线资源供用户使用。

看完这,已经开摆了,太多了。。。。

第十一章

了解标准广播

image-20220619234214477

第十二章

考的少

两种方案. HttpURLConnection HttpClient!

不想看就别看了

第十三章

不想看辣,开摆!

2.重写一系列增删改查的方法,对数据进行操作

3.声明CONTENT_URI,实现UriMatcher

4.在清单文件中进行注册

[外链图片转存中…(img-LLio57G5-1655653740173)]

[外链图片转存中…(img-eRxDCSo7-1655653740174)]

[外链图片转存中…(img-W5E054BH-1655653740174)]

使用

应用通过ContentProvide共享数据,ContentResolver对共享的数据进行操作。ContentResolver起一个中介的作用。

[外链图片转存中…(img-CJTcBwzb-1655653740174)]

五个存储方式的使用场景和主要差异总结

文件存储是一种较常用的方法,与Java中的文件存储类似,是通过I/O流的形式存储数据到手机内存、SD卡。可以存储大数据,如文本、图片、音频等。

SharedPreferences是Android提供的用来存储一些简单的配置信息的一种机制。采用XML格式将数据存储到设备中。

SQLite数据库:结构化数据

SQLite是一个轻量级数据库,比传统数据库更适合用于嵌入式系统占用资源少,运行高效可靠,可移植性强提供了零配置(zero-configuration)运行模式.

网络存储(PPT里没介绍):需要与网络数据包打交道,将数据存储在服务器上,通过网络提供的存储空间来存储/获取数据信息,存储一些在线资源供用户使用。

看完这,已经开摆了,太多了。。。。

第十一章

了解标准广播

[外链图片转存中…(img-WXuPL6Zf-1655653740174)]

第十二章

考的少

两种方案. HttpURLConnection HttpClient!

不想看就别看了

第十三章

不想看辣,开摆!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值