怎么 在activity中使用数据库

怎么 在activity中使用数据库,第1张

参考一下androiddatabasesqliteSQLiteOpenHelper的用法

可以继承这个类写一个Helper,重写一下它的onCreate和onUpdate之类的方法

然后在activity中合适的位置生成这个类对象,用这个Helper对象来获取数据库、获取查询结果或者执行SQL!

安卓类是什么?实体bean么还是自定义的控件

一个应用基本就是Activity和fragment组成的,activity之间传数据可以通过intent,fragment可以通过getActivity()获取到当前片段绑定的activity对象,获取数据。

android各组件之间可以使用Intent来传递数据, 这里以ActivityA向ActivityB传递数据为例

Intent intent = new Intent(context, ActivityBclass);

//如果context上下文不是Activity的话, 需要添加下面这个flag,

if (!(context instanceof Activity)) {

   intentaddFlags(IntentFLAG_ACTIVITY_NEW_TASK);

}

//添加要传递的数据

//这里的key到时候ActivityB会用来得到value

//android要求可以传递的数据类型包括基本数据类型,

//基本数据类型的数组,CharSequence,以及实现了Parcelable的对象

//putExtra是重载方法, 根据value的类型会适当的打包进intent的Bundle对象里

intentputExtra(key, value);

//或则将数据打包进Bundle data里, 然后intentputExtras(data);

contextstartActivity(intent);

在ActivityB中

public void onCreate(Bundle savedInstanceState) {

    //得到传递过来的数据

    Bundle bundle = getIntent()getExtras();

    //通过getXXX方法来获取key对应的value

    bundlegetXXX(key);

}

上篇总结了Activity的一些知识,现在继续对Activity的知识进行梳理,包括Activity直接传递数据,Activity的生命周期,Activity的启动模式等

1intent传递数据:

使用startActivity方法,intent的putExtra()方法,以键值对的形式传递数据,该方法有很多重载方法,可以根据传递数据的不同类型选择合适的方法除了有putExtra()方法外,还有putExtras()方法,传递的参数是Bundle

如果传递的是对象,这个对象要实现序列化,也就是实现Parcelable或者Serializable接口

如果希望被启动的页面返回数据,需要使用startActivityForResult()方法,这个方法中需要设置访问号,用来区分不同的访问者并且在启动页重写onActivityResult方法用来接收返回的数据,

2两种情况下的Activity的生命周期

正常情况下的生命周期,正常情况是指用户的正常 *** 作下的Activity的生命周期后面会分析异常情况下的生命周期

onCreate: Activity第一次创建时候的回调,主要是在这个方法进行初始化工作,比如初始化控件和事件绑定工作

onStart:Activity从不可见状态变成可见状态

onResume:Activity变成前台,可以和用户交互

onPause:Activity可见但是不能和用户交互

onStop:Activity从可见变得不可见,成为后台Activity

onDestroy:Activity销毁时调用

onRestart:Activity从后台变成前台Activity

在启动Activity和两个Activity之间跳转时,可以知道Activity的生命周期变化过程,有两个说明:(1)在两个Activity跳转时,第一个Activty的onPause,onStop方法和第二个Activity的生命周期方法调用时机

第一个Activity先执行onPause方法,第二个Activity才能创建这也就意味着在onPause方法中不能执行太耗时的 *** 作,否则会影响第二个Activity的创建在源码(ActivityStack)中有这样的注释:

(2)onStart和onResume,onPause和onStop这两对方法的实质不同处:onStart和onStop这两个方法是从Activity的可见性来区分的,onResume和onPause是从Activity是否处于前台,是否可以和用户交互来区分的,注意在onPause调用时Activity还是可见的,调用时机比如d出dialog时,下面的Activity是可见的这个时候调用的是onPause方法

异常情况下Activity的生命周期:异常情况下是指资源相关配置发生变化或后台Activity被系统回收时Activity的生命周期后台Activity被系统回收的情况比较难复现,在资源相关配置发生变化时和后台Activity被回收时的生命周期执行过程是一样的,比较容易复现的就是横竖屏切换时的生命周期执行过程在 AndroidManifest的Activity组件下配置android:screenOrientation标签,当设置可以横竖方向随着方向感应器来调节时,在切换时会出现先销毁Activity再创建的过程

过程:

在这种情况下有可能会有数据的丢失,系统提供用来保存数据和还原数据的方法:onSaveInstanceState和onRestoreInstanceState用方法参数Bundle可以保存和还原数据

可以根据需要设置android:screenOrientation标签,设定activity的方向,如果activity的方向是需要横竖屏切换,但是不容许销毁Activity,可以设置如下标签,当这些情况(常用的)发生变化是不会重新走Activity的生命周期方法,只会调用onConfigurationChanged,可以根据情况在这个方法里更新 *** 作

切换时的log输出

3Activity的四种启动模式

标准:是Activity的默认启动模式,对于AndroidManifest的Activity节点下的android:launchMode="standard"标签

特定:每次启动都会重新创建新的Activity

singleTop:对应的AndroidManifes的Activity节点下的android:launchMode="singleTop"标签

特点:当此模式的Activity处于栈顶时,不会重新创建新的Activity,会调用onNewIntent方法,如果更新Activity的intent,需要调用 setIntent()方法,具体的生命周期过程

singleTask:在activity栈中已经有需要再启动的activity时,会先清除位于需要启动activity之上的activity,例如:启动顺序mainActivity-activityA -activityB-activityA,其中activityA是singleTask的启动模式:

singleInstance:在一个栈中单独存在的activity

关于activity栈:是指用来管理activity一种"先进先出"的队列结构,查看activity对应栈的方法:Activity的getTaskId()方法,同一个栈的id值是相同的adb shell dumpsys activity在终端查看栈结构,比如还是上面的activity启动顺序,不同是ActivityA这是设置成singleInstance,这是的栈结构:有两个TaskRecord,其中ActivityB和MainActivity位于同一个栈中

4Activity开发中使用技巧:

<1>定义一个父Activity,在创建新的Activity时继承这个activity即可,将一些activity的公共设置可以设置在父activity中,比如获取每个Activity的名字,设置activity的窗体属性,同一管理activity的生命周期等,

<2>在启动的activity中定义静态方法,启动条件会显而易见:

<3>管理activity类,用来一键退出app在父类Activity的创建和销毁时用来添加和移除Activity,在需要一键退出的地方调用静态finishAllActivity方法

共享数据应该从整个框架设计上开始修改而不是专注从功能实现的角度上出发

1制作一个独立的静态类,用于存储数据(详细参考单例模式)

2Activity本身并不再保存相关数

3Activity通过静态类获取数据的引用并显示相关内容

另外可能出现的问题

当多个Activity间 需要传递参数时,可以通过EventBus进行传递

当数据改变时 发出改变消息,各Activity均是通过监听消息改变更新界面(详细可百度观察者模式)

详细框架设计可以参考一些很传统的框架,比如mvc之类的框架,相关文档具体可以在百度百科里查询

这个不难实现吧,在另一个activity中调用thisgetSharedPreferences('你的sharedPreference name' int mode); 这样就得到了;

开始第二个activity的时候,用startActivityForResult来开始,然后在第一个Activity里重写onActivityResult,就可以接收第二个Activity的数据了,第二个Activity返回给第一个的时候可以用setResult来设定返回的数据。

望采纳

可以通过activity将intent里面的数据传给fragment(例如setArguments),fragment可以通过getArguments来获取。

再看看别人怎么说的。

以上就是关于怎么 在activity中使用数据库全部的内容,包括:怎么 在activity中使用数据库、安卓类跟activity怎么传数据、如何在Android开发中activity之间数据传递等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9332792.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存