数据库
首页 > 数据库> > 安卓拨号器(AS+SQLite+ModelView)

安卓拨号器(AS+SQLite+ModelView)

作者:互联网

百度网盘工程zip下载链接:https://pan.baidu.com/s/1TS8oTjQDdZY25J7dpFVKOg 
提取码:pjyz 
 

目录

项目中遇到的一些小问题

1.非ui线程里面修改界面数据,一定要通知

2.定义一个entity类时,实现Serializabel接口的目的?

3.另外在安卓访问数据库,要在主线程进行,会导致页面很卡。可以写一个子线程进行访问。如何将子线程访问到的数据发送给主线程呢?

4.主线程用Hadler接受子线程消息,需要将声明静态的MtHadler类继承Hanler类:

5.读取res/raw文件夹下的数据使用io流,虚拟机的文件系统与电脑文件系统不一样!不要用绝对路径读取数据。

6.AS下使用轻量级的数据库SQLite

8.当需要MainActivity和子Fragment共享一个viewModel时,在fragment里面一定是

9.SQLite语法编写错误,字符串两侧加' '


项目中遇到的一些小问题

1.非ui线程里面修改界面数据,一定要通知

2.定义一个entity类时,实现Serializabel接口的目的?

如果需要发送该类数据,使用Handler可以用handler.setData(new Bundle().putSerializable(数据对象))来实现

3.另外在安卓访问数据库,要在主线程进行,会导致页面很卡。可以写一个子线程进行访问。如何将子线程访问到的数据发送给主线程呢?

方法:可以使用Handler机制,主线程建立Handler对象,子线程使用。

所谓的在子线程通过handle发送消息,然后回主线程处理消息,通过handleMessage进行UI的更新,这个例子其实很常见,就是在主线程中我们通过创建一个mainHandler对象,然后并重写这个handler的handleMessage函数,并在子线程中通过主线程中创建的这个mainHandler来发送消息给主线程。

其实在主线程中创建的这个mainHandler,他在new的时候,就会自动的和主线程中的looper对象进行绑定,而looper对象里只有一个messageQueue,所以这样3者就建立了联系。同时主线程中的Looper会不停的loop,在这个loop函数里面他会不断的取looper对象里面的MessageQueue中的massage,然后调用消息目标(发送消息的handler)的handleMessage。其实这一切都是在主线程下执行的,所以才能进行UI的更新。

那么在子进程中发送消息,其实只是在子线程中引用了mainHander这个handler对象,并调用该handler对象的sendMessage函数发送消息,而发送消息函数sendMessasge函数所做的事情,是将需要发送出去的这个message放入handler对象的消息队列中,就完事了。注意:这里的发送消息,仅仅是将消息入队到调用发送消息的那个handler对象的消息队列中,而不是调用发送消息的这个子线程的消息队列中。

例如mainHandler.sendEmptyMessage(0)这个函数,他入队消息的队列是mainHandler对应的MessageQueue中,跟调用发送消息的队列无关。

4.主线程用Hadler接受子线程消息,需要将声明静态的MtHadler类继承Hanler类:

主线程:

子线程:

 

5.读取res/raw文件夹下的数据使用io流,虚拟机的文件系统与电脑文件系统不一样!不要用绝对路径读取数据。

 

6.AS下使用轻量级的数据库SQLite

双击可以打开:

8.当需要MainActivity和子Fragment共享一个viewModel时,在fragment里面一定是

ViewModelProviders.of(getActivity()).get(MyViewModel.class)

而不是

ViewModelProviders.of(this).get(MyViewModel.class)

9.SQLite语法编写错误,字符串两侧加' '

 

标签:SQLite,ModelView,安卓,主线,mainHandler,发送,handler,线程,消息
来源: https://blog.csdn.net/qq_43496675/article/details/111300436