天气说变就变,马上又变冷了,还好空气不错,阳光也不错,早起上班的车上的人也不多,公司来的同事和昨天一样一样的,可能明天会多一些吧,那就再来学习android吧。学了两个android的组件,这里学习下第三个android的组件,Content Provider内容提供器。

    Content Provider向我们提供了在不同应用程序之间的数据共享,比如微信啊,支付宝啊,想要获取手机联系人的信息,而手机联系人是另一个应用程序,那么这时候就需要用到Content Provider了。Content Provider为存储和获取数据提供了统一的接口,对数据进行了封装,我们不用关心数据存储的细节,使用表的形式来组织数据。Android提供了一些默认的ContentProvider,比如音频,视频,图片和通讯录等。

    类似于文件,SharedPreferences或者SQLiteDataBase都有一个路径,那么ContentProvider也是有路径的,它的路径由Uri表示,Uri主要包含了两部分的信息,一个是需要操作的ContentProvider,另一个就是对ContentProvider中的什么数据进行操作。一个简单的Uri:

content://com.example.contentprovidertest.provider/person/2

    scheme:content://表示,这个是android定义好的,不能改变的

    主机名或者authority:com.example.contentprovidertest.provider表示,唯一的,一般指的是包名,

    路径:person,表示的是person这个表,2表示id为2。

    如果要把上面的字符串转变为uri,那么就要使用Uri类中的parse()方法,如下:

    Uri uri=Uri.parse("content://com.example.contentprovidertest.provider/person/2");
    这里先来写个例子,用来获取通讯录中的信息吧。新建ContentProviderTest工程,因为模拟器的联系人还没有创建,这里先添加几个好友:


    接着我们继续编写代码,先在layout中添加listview,因为通讯录一般都是用listview来实现的。代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.jared.contentprovidertest.MainActivity"><ListViewandroid:id="@+id/contacts"android:layout_height="match_parent"android:layout_width="match_parent"/></LinearLayout>

    这里就简单地加了一个listview,接着修改MainAcitivity代码:

package com.example.jared.contentprovidertest;import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private ListView contactViews;ArrayAdapter<String> adapter;List<String> contactList = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);contactViews = (ListView)findViewById(R.id.contacts);adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contactList);contactViews.setAdapter(adapter);readContacts();}public void readContacts() {Cursor cursor = null;try {cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, null, null, null);while(cursor.moveToNext()) {String ContactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));String ContactPhoneNum = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));contactList.add(ContactName+'\n'+ContactPhoneNum);}} catch (Exception e) {e.printStackTrace();} finally {if(cursor != null){cursor.close();}}}
}

    这里用了string类型的适配器,然后通过cursor来获取联系人名字和电话号码,其中的名字和电话的定义最终也是字符串。

String DISPLAY_NAME = "display_name";
String NUMBER = "number";
    这个和数据库的存取很类似,接着在AndroidManifest中添加权限:

    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    然后运行app,效果如下:



    由上可知,获得了三个联系人的信息,也就是我们刚保存的信息。

    接着学习自定义的ContentProvider,这里借用了dbtest中的MyDBHelper类,新建myContenProvider类,代码如下:

package com.example.jared.contentprovidertest;import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.support.annotation.Nullable;/*** Created by jared on 16/2/15.*/
public class myContentProvider extends ContentProvider {public static final int PERSON_DIR = 0;public static final int PERSON_ITEM = 1;public static final int TEACHER_DIR = 2;public static final int TEACHER_ITEM = 3;private static UriMatcher uriMatcher;private static final String AUTHORITY = "com.example.jared.contentprovidertest.provider";private MyDBHelper myDBHelper;static {uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);uriMatcher.addURI(AUTHORITY, "person", PERSON_DIR);uriMatcher.addURI(AUTHORITY, "person/#", PERSON_ITEM);uriMatcher.addURI(AUTHORITY, "teacher", TEACHER_DIR);uriMatcher.addURI(AUTHORITY, "teacher/#", TEACHER_DIR);}@Overridepublic boolean onCreate() {myDBHelper = new MyDBHelper(getContext(), "PersonStore.db", null, 2);return true;}@Overridepublic int update(Uri uri, ContentValues contentValues, String s, String[] strings) {SQLiteDatabase db = myDBHelper.getWritableDatabase();int updateRows = 0;switch (uriMatcher.match(uri)) {case PERSON_DIR:updateRows = db.update("person", contentValues, s, strings);break;case PERSON_ITEM:String personId = uri.getPathSegments().get(1);updateRows = db.update("person", contentValues, "id = ?", new String[]{personId});break;case TEACHER_DIR:updateRows = db.update("teacher", contentValues, s, strings);break;case TEACHER_ITEM:String teacherId = uri.getPathSegments().get(1);updateRows = db.update("teacher", contentValues, "id = ?", new String[]{teacherId});break;default:break;}return updateRows;}@Overridepublic int delete(Uri uri, String s, String[] strings) {SQLiteDatabase db = myDBHelper.getWritableDatabase();int deleteRows = 0;switch (uriMatcher.match(uri)) {case PERSON_DIR:deleteRows = db.delete("person", s, strings);break;case PERSON_ITEM:String personId = uri.getPathSegments().get(1);deleteRows = db.delete("person", "id = ?", new String[]{personId});break;case TEACHER_DIR:deleteRows = db.delete("teacher", s, strings);break;case TEACHER_ITEM:String teacherId = uri.getPathSegments().get(1);deleteRows = db.delete("teacher", "id = ?", new String[]{teacherId});break;default:break;}return deleteRows;}@Nullable@Overridepublic String getType(Uri uri) {switch (uriMatcher.match(uri)) {case PERSON_DIR:return "vnd.android.cursor.dir/vnd."+AUTHORITY+".person";//break;case TEACHER_DIR:return "vnd.android.cursor.dir/vnd."+AUTHORITY+".teacher";//break;case PERSON_ITEM:return "vnd.android.cursor.item/vnd."+AUTHORITY+".person";//break;case TEACHER_ITEM:return "vnd.android.cursor.item/vnd."+AUTHORITY+".teacher";//break;default:break;}return null;}@Nullable@Overridepublic Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {SQLiteDatabase db = myDBHelper.getWritableDatabase();Cursor cursor = null;switch (uriMatcher.match(uri)) {case PERSON_DIR:cursor = db.query("person", strings, s, strings1, null, null, s1);break;case PERSON_ITEM:String personId = uri.getPathSegments().get(1);cursor = db.query("person", strings, "id = ?", new String[]{personId}, null, null, s1);break;case TEACHER_DIR:cursor = db.query("teacher", strings, s, strings1, null, null, s1);break;case TEACHER_ITEM:String teacherId = uri.getPathSegments().get(1);cursor = db.query("teacher", strings, "id = ?", new String[]{teacherId}, null, null, s1);break;default:break;}return cursor;}@Nullable@Overridepublic Uri insert(Uri uri, ContentValues contentValues) {SQLiteDatabase db = myDBHelper.getWritableDatabase();Uri uriReturn = null;switch (uriMatcher.match(uri)) {case PERSON_DIR:case PERSON_ITEM:long newPersonId = db.insert("person", null, contentValues);uriReturn = Uri.parse("content://"+AUTHORITY+"/person/"+newPersonId);break;case TEACHER_DIR:case TEACHER_ITEM:long newTeacherId = db.insert("teacher", null, contentValues);uriReturn = Uri.parse("content://"+AUTHORITY+"teacher"+newTeacherId);break;default:break;}return uriReturn;}
}

    这里基本上和数据库的操作没什么不同,就是需要注意AUTHORITY需要在AndroidManifest中注册。

    通过UriMatcher来匹配uri,然后通过Uri.parse解析uri。此外这里又重写了onCreate方法,update方法,delete方法。getType方法,query方法,insert方法。其中onCreate方法主要是创建数据库,update为更新数据,delete是删除数据,query是查询数据,insert为插入数据,基本和数据库的操作很类似。

    getType方法主要是获取Uri对象的MIME类型

    如果以路径结尾的话,那么就是:vnd.android.cursor.dir/vnd.+authoriry+.path;

    如果以id结尾的话,那么就是:vnd.android.cursor.item/vnd.+authoriry+.path;

    接着就是AndroidManifest了,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.jared.contentprovidertest" ><uses-permission android:name="android.permission.READ_CONTACTS"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme" ><activity android:name=".MainActivity" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><providerandroid:name=".myContentProvider"android:exported="true"android:authorities="com.example.jared.contentprovidertest.provider"></provider></application></manifest>

    这里需要添加provider,其中android:name属性是类名。android:exported属性表示对外暴露,所以需要为true。android:authorities属性表示的是authority,也就是上面代码的那个authority,必须一致。这样基本上就ok了。

    接着我们创建一个ContentProviderTest2工程,用来获取,操作ContentProviderTest的内容。layout就参考了dbtest的工程的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/createDB"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="创建数据库" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"><Buttonandroid:id="@+id/addData"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="添加数据"/><Buttonandroid:id="@+id/updateData"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="更新数据"/><Buttonandroid:id="@+id/delData"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="删除数据"/><Buttonandroid:id="@+id/queryData"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="查询数据"/></LinearLayout></LinearLayout>

    接着编写代码实现各个按钮的功能:

package com.example.jared.contentprovidertest2;import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {private static final String TAB = "MainActivity";private Button addDataBtn;private Button deleteDataBtn;private Button updateDataBtn;private Button queryDataBtn;public String id1, id2;private static final String PERSON_URI = "content://com.example.jared.contentprovidertest.provider/person";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);addDataBtn = (Button)findViewById(R.id.addData);addDataBtn.setOnClickListener(new myOnClickListener());deleteDataBtn = (Button)findViewById(R.id.delData);deleteDataBtn.setOnClickListener(new myOnClickListener());updateDataBtn = (Button)findViewById(R.id.updateData);updateDataBtn.setOnClickListener(new myOnClickListener());queryDataBtn = (Button)findViewById(R.id.queryData);queryDataBtn.setOnClickListener(new myOnClickListener());}private class myOnClickListener implements View.OnClickListener {@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.addData:id1 = setAddDataBtn("xiao ming", 20, 172.5, "man");id2 = setAddDataBtn("xiao hong", 22, 162.5, "woman");break;case R.id.delData:setDeleteDataBtn(id1);break;case R.id.updateData:setUpdateDataBtn(id1, 175.0);break;case R.id.queryData:setQueryDataBtn();break;default:break;}}}public void setQueryDataBtn() {Uri uri = Uri.parse(PERSON_URI);Cursor cursor = getContentResolver().query(uri, null, null, null, null);if(cursor != null) {while (cursor.moveToNext()) {String personName = cursor.getString(cursor.getColumnIndex("name"));int personAge = cursor.getInt(cursor.getColumnIndex("age"));double personHeight = cursor.getDouble(cursor.getColumnIndex("height"));String personSex = cursor.getString(cursor.getColumnIndex("sex"));Log.d(TAB, "name:"+personName + " |age:"+personAge + " |height:"+personHeight + " |sex:"+personSex);}cursor.close();}}public void setUpdateDataBtn(String id, double height) {Uri uri = Uri.parse(PERSON_URI+"/"+id);ContentValues values = new ContentValues();values.put("height", height);getContentResolver().update(uri, values, null, null);}public void setDeleteDataBtn(String id) {Uri uri = Uri.parse(PERSON_URI+"/"+id);getContentResolver().delete(uri, null, null);}public String setAddDataBtn(String name, int age, double height, String sex) {Uri uri = Uri.parse(PERSON_URI);ContentValues values = new ContentValues();values.put("name", name);values.put("age", age);values.put("height", height);values.put("sex", sex);Uri newUri = getContentResolver().insert(uri, values);return newUri.getPathSegments().get(1);}
}

    这里基本上都是先把字符串转换为Uri,然后通过getContentResolver()类的方法来实现各个功能,准备好代码后,我们继续运行看下效果:

    首先是添加功能:按添加按钮再按查询,查看log信息如下:

02-15 03:47:53.730 17319-17319/com.example.jared.contentprovidertest2 D/MainActivity: name:xiao ming |age:20 |height:172.5 |sex:man
02-15 03:47:53.780 17319-17319/com.example.jared.contentprovidertest2 D/MainActivity: name:xiao hong |age:22 |height:162.5 |sex:woman
   已经添加了数据,然后是更新功能:按更新按钮再按查询,查看log信息如下:

02-15 03:49:33.210 17319-17319/com.example.jared.contentprovidertest2 D/MainActivity: name:xiao ming |age:20 |height:175.0 |sex:man
02-15 03:49:33.210 17319-17319/com.example.jared.contentprovidertest2 D/MainActivity: name:xiao hong |age:22 |height:162.5 |sex:woman
    已经更新身高为175.0了,然后是删除功能:按删除按钮再按查询,查看log信息如下:

02-15 03:50:46.650 17319-17319/com.example.jared.contentprovidertest2 D/MainActivity: name:xiao hong |age:22 |height:162.5 |sex:woman

    查询功能已经在上面的多次操作中用过了,基本上访问另外一个app数据的功能也实现了。ContentProvider就先学到这里了,继续学习别的内容!



查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Android Api Demos登顶之路(十四)Quick Contacts

    这个demeo主要演示的是使内容提供者和内容解析者来获取其它应用的数据。Content Provider为不同应用之间共享数据提供了统一的接口,Android系统的每个Content Provider都定义了一个CONTENT_URI,Android中每个Context对象(如Activity)对含有一个ContentResolver,ContentR…...

    2024/4/17 6:15:40
  2. 编程方法课程学习心得

    今天终于把《编程方法》的课程视频看完了,从下载课程到现在,断断续续学习了将近一个月,每一节课都有仔细的看完,用一个字总结的话就是 好!这门课的课程代号是CS106A,是一门计算机的编程基础课,讲课所用到的语言是java,但课程不局限于一门语言,还讲述了很多计算机底层的…...

    2024/4/17 6:15:58
  3. 深度学习的一些基础工具包(框架)介绍(随时更新)

    1.Pandas:pip install pandas Pandas是python的一个数据分析包,是基于Numpy的一种工具,纳入了大量库和一些标准的数据模型。提供了高效操作大型数据集所需的工具,提供了大量能使我们快速便捷地处理数据的函数和方法。Pandas最初被作为金融数据分析工具而开发出来,因此,pa…...

    2024/4/17 6:16:10
  4. 设计模式——抽象工厂模式、可拓展性分析

    抽象工厂模式的例子举起来要写的代码就比较多,所以单独写一篇,如果对工厂模式感兴趣,可以参见设计模式——工厂模式、简单工厂模式、工厂方法模式 今天介绍抽象模式按以下目录介绍抽象工厂模式概念 抽象模式例子 适用性 类图 抽象工厂的设计和可拓展性抽象工厂模式 抽象工厂…...

    2024/3/31 20:45:57
  5. 云电脑玩游戏需要下载吗?

    十几二十年前,一个游戏的大小是按KB或者M做单位的,游戏大小顶天了也就是1G左右。但是现在一个3A游戏动辄就是十几个G的大小,有的加上DLC都快100个G了,家里网速好还好说,网速一般的话,光下载就得半天一天的,而且除了花钱升网速好像也没什么好的解决办法。 不过凡事总有例…...

    2024/4/2 5:19:41
  6. 从第一本书开始,如何成为深度学习工程师(上篇)

    在这里,小编理解的初阶选手,是具备了一定的计算机基础,但是对于深度学习理论和动手实操方面没接触过的筒子。通过系统学习后能够快速入门,并升级中阶。如下是建议初阶少侠的修仙路径,需要走好这四步,即:读理论书→看视频课→实操训练→社区交流具体怎么操作呢?别着急,…...

    2024/4/27 6:44:27
  7. 初步认识游戏服务器

    游戏服务端大访问量大并发的优化解决方案所有的对象都放在内存,20万用户以下无压力。如果游戏的用户很多,例如超过50万,内存就会不够,可使用LRU算法来淘汰一些数据。流程:收到用户请求 - 在内存查找用户对象 - 如果不存在就从数据库中加载- 放入内存cache-如果cache中的用…...

    2024/5/8 7:01:10
  8. 简单工厂模式,工厂方法模式,抽象工厂模式,spring的狂想

    菜鸟D在项目中遇见一个比较纠结的高耦合,所以就想办法来解耦。情况是这样的:系统通过用户选择treeview控件的节点判断调用不同的处理,这些处理中某些东西又是类似的。同事的建议是采用简单工厂,耦合就耦合吧,反正treeview节点基本是不会变化的。(能偷懒就偷懒吧)菜鸟D有…...

    2024/5/8 10:11:30
  9. 工作流领域开始出现开源的BPEL引擎

    ActiveBPEL组织是一个主导ActiveBPEL引擎技术的开源组织.ActiveBPEL引擎是一个健壮的运行时环境,它能执行用户按BPWL4WS规范编写的业务流程. BPWL4WS规范由MicroSoft,BEA,IBM等公司提出,它基于web service实现,与现在的多个流行的工作流技术标准有冲突和竞争. ActiveBPEL…...

    2024/5/7 22:51:49
  10. 我学习的编程,都给我带来了什么?

    前言写这篇文章的主要的原因是什么呢?主要是想到了自己是怎么从一个工科专业然后转行来做到计算机专业,这中间的酸甜苦辣,人间疾苦想分享给大家,以及学习了编程之后我的世界观、价值观的变化,希望能与大家产生共勉。我的编程之路作为一个从农村出来,家住四川,自然就来到…...

    2024/5/7 23:53:04
  11. Android Application - Display contacts

    To get contact information from android.provider.ContactsContract and display out on screen using SimpleAdapter.API Version: 2.31. Get contact information:>> Android emulator 中的资料结构任何 SQLITE 的 database 都会有一张表存放所有表的信息:"sele…...

    2024/5/7 22:02:55
  12. 用tensorflow深度学习梵高的画并模仿

    最近在知乎上发现的一个好玩的东西:杨航锋的回答动手把它实现了一下,记录下自己遇到的问题防止遗忘。1、tensorflow需要python3这一点曾经深深影响了我学习这个教程的动力。不过好在anaconda可以新建一个环境使得python2和python3兼容。所以到网上查看搭建python2和python3环…...

    2024/5/8 0:34:07
  13. (五)抽象工厂模式详解

    作者:zuoxiaolong8810(左潇龙),转载请注明出处。前两章我们已经讨论了两种有关工厂的模式,今天我们来看最后一种与工厂相关的模式,抽象工厂模式。抽象工厂模式算是工厂相关模式的终极形态,如果各位完全理解了上一章的工厂方法模式,那么抽象工厂模式就很好理解了。它与工…...

    2024/3/30 8:35:26
  14. Android学习笔记(四七):Content Provider初谈和Android联系人信息

    Content Provider 在数据处理中,Android通常使用Content Provider的方式。Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增、删、改、查的操作。Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取…...

    2024/4/17 6:15:46
  15. 包管理器的进化

    包管理器在 Linux 软件管理中扮演了重要角色。这里对一些主要的包管理器进行了对比。今天,每个可计算设备都会使用某种软件来完成预定的任务。在软件开发的上古时期,为了找出软件中的“虫”和其它缺陷,软件会被严格的测试。在近十年间,软件被通过互联网来频繁分发,以试图通…...

    2024/4/17 6:17:10
  16. 规则引擎

    规则引擎之前为一家公司设计过规则引擎,现在把这个东西整理一下。对于现在很多商用软件开发本质为对于规则的一种软件化开发,对规则的实现,通过定义一个规则引擎可以更快更方便的实现标准业务下的业务流程,简化开发过程保证了绝大部分业务流程可以通过配置完成。一、概要因…...

    2024/5/8 1:25:02
  17. 设计模式练习(1)——简单工厂模式

    简单工厂模式一、题目: 使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W。则返回一个对象Woman,用java语言实现该场景。现在需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化…...

    2024/5/8 1:27:49
  18. Github上关注最多的53个深度学习项目

    项 目 名 称Stars项目介绍TensorFlow29622使用数据流图计算可扩展机器学习问题Caffe11799Caffe是一个高效的开源深度学习框架Neural Style10148Torch实现的神经网络算法Deep Dream9042Deep Dream,一款图像识别工具Keras7502一款Python实现的深度学习库,包括卷积神经网络、递归…...

    2024/5/7 22:16:28
  19. failed to find provider info for com.……

    学习content provider,做了个练习,两天来一直不成功,提示: failed to find provider info for com.…… 网上也有很多人提这个问题,没有找到适用的解决方法。今早又一遍检查代码,突然发现,AUTHORITY在provider.java中有设定,在AndroidManifest.xml中也有设定,但两个值…...

    2024/4/12 3:37:23
  20. Keras之父:大多数深度学习论文都是垃圾,炒作AI危害很大

    深度学习Keras之父、谷歌大脑人工智能和深度学习研究员Franois Chollet撰写了一本深度学Python教程实战书籍《Python深度学习》,书中介绍了深度学习使用Python语言和强大Keras库,详实新颖。近日,Franois Chollet接受了采访,就“深度学习到底是什么”、“Python为何如此广受…...

    2024/4/20 18:03:38

最新文章

  1. 数据平台—邮件服务

    数据平台—邮件服务 数据平台一个比较常见的场景就是将每天的汇总数据通过邮件的形式发送出去,所以我们需要一个比较通用的邮件服务 主要实现的功能是通过提供一段SQL, 将该SQL 获取的数据通过邮件的形式进行发送。主要包含两个模块,第一个是邮件模块,第二个是获取数据模…...

    2024/5/8 13:26:46
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. Android如何实现一个应用位于前台时全局页面每隔三分钟弹出一次一天最多弹出5次的GroMore半插屏广告,处于付费页和后台时停止

    首先我们需要添加一个全局的Application public class MyApp extends LitePalApplication {private static final String TAG "MyApp";private static Context mContext;private boolean isManageMent;public static String oaid;Overridepublic void onCreate() {…...

    2024/5/6 22:23:37
  4. 阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云

    8核32G云服务器租用优惠价格表&#xff0c;云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价&#xff0c;腾讯云和京东云是轻量应用服务器&#xff0c;阿里云是云服务器ECS&#xff1a; 阿里云8核32G服务器 阿里云8核32G服务器价格…...

    2024/5/8 2:44:58
  5. 17、Lua 文件 I-O

    Lua 文件 I/O Lua 文件 I/O简单模式完全模式 Lua 文件 I/O LuaI/O 库用于读取和处理文件。分为简单模式&#xff08;和C一样&#xff09;、完全模式。 简单模式&#xff08;simple model&#xff09;拥有一个当前输入文件和一个当前输出文件&#xff0c;并且提供针对这些文件…...

    2024/5/8 0:52:46
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57