云炬Android开发笔记 7登陆注册功能开发

阅读目录
1.注册UI及验证逻辑实现

1.1 布局
1.2 注册信息的验证和逻辑
2.登录UI及验证逻辑实现

2.1 布局
2.2 登录的逻辑框架
3.服务器数据简单介绍

3.1 服务器的数据
3.2 数据端访问的数据
3.3 打印信息的级别类封装
4.与基于GreenDao的数据库框架设计

4.1 添加依赖和配置
4.2 创建entivity
4.3 openHelper类的创建
4.4 功能的抽取
4.5 数据的存储
4.6 添加数据反射显示机制
5.用户状态与用户信息的回调封装 
5.1 注册的回调实例
5.2 登录回调的实例
5.3 登录注册的封装
 6. 框架的总结


 

回到顶部

1.注册UI及验证逻辑实现

回到顶部

1.1 布局

【说明】属于业务逻辑,登陆的业务逻辑,新建sign,新建类;

【注意】如果在ScrollView布局中如果嵌套了其他的布局,则其他的布局的layout_height属性应该为wrap_content;

【增加依赖】

复制代码

  1 <?xml version="1.0" encoding="utf-8"?>2 <android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"3     xmlns:tools="http://schemas.android.com/tools"4     android:layout_width="match_parent"5     android:layout_height="match_parent"6     android:orientation="vertical">7 8     <android.support.v7.widget.Toolbar9         android:layout_width="match_parent"10         android:layout_height="?attr/actionBarSize"11         android:background="@android:color/holo_orange_dark">12 13         <android.support.v7.widget.AppCompatTextView14             android:layout_width="match_parent"15             android:layout_height="match_parent"16             android:gravity="center"17             android:text="注册"18             android:textColor="@android:color/white"19             android:textSize="20sp"20             tools:ignore="HardcodedText" />21     </android.support.v7.widget.Toolbar>22 23     <android.support.v4.widget.NestedScrollView24         android:layout_width="match_parent"25         android:layout_height="match_parent">26 27         <android.support.v7.widget.LinearLayoutCompat28             android:layout_width="match_parent"29             android:layout_height="wrap_content"30             android:fitsSystemWindows="true"31             android:orientation="vertical"32             android:paddingLeft="24dp"33             android:paddingRight="24dp"34             android:paddingTop="56dp">35 36             <android.support.v7.widget.AppCompatImageView37                 android:layout_width="wrap_content"38                 android:layout_height="72dp"39                 android:layout_gravity="center_horizontal"40                 android:layout_marginBottom="24dp"41                 android:src="@mipmap/ic_launcher" />42 43             <!--姓名-->44             <android.support.design.widget.TextInputLayout45                 android:layout_width="match_parent"46                 android:layout_height="wrap_content"47                 android:layout_marginBottom="8dp"48                 android:layout_marginTop="8dp">49 50                 <android.support.design.widget.TextInputEditText51                     android:id="@+id/edit_sign_up_name"52                     android:layout_width="match_parent"53                     android:layout_height="wrap_content"54                     android:hint="姓名"55                     android:inputType="textPersonName"56                     tools:ignore="HardcodedText" />57             </android.support.design.widget.TextInputLayout>58 59             <!--邮箱-->60             <android.support.design.widget.TextInputLayout61                 android:layout_width="match_parent"62                 android:layout_height="wrap_content"63                 android:layout_marginBottom="8dp"64                 android:layout_marginTop="8dp">65 66                 <android.support.design.widget.TextInputEditText67                     android:id="@+id/edit_sign_up_email"68                     android:layout_width="match_parent"69                     android:layout_height="wrap_content"70                     android:hint="邮箱"71                     android:inputType="textEmailAddress"72                     tools:ignore="HardcodedText" />73             </android.support.design.widget.TextInputLayout>74 75             <!--手机号码-->76             <android.support.design.widget.TextInputLayout77                 android:layout_width="match_parent"78                 android:layout_height="wrap_content"79                 android:layout_marginBottom="8dp"80                 android:layout_marginTop="8dp">81 82                 <android.support.design.widget.TextInputEditText83                     android:id="@+id/edit_sign_up_phone"84                     android:layout_width="match_parent"85                     android:layout_height="wrap_content"86                     android:hint="手机号码"87                     android:inputType="phone"88                     tools:ignore="HardcodedText" />89             </android.support.design.widget.TextInputLayout>90 91             <!--密码-->92             <android.support.design.widget.TextInputLayout93                 android:layout_width="match_parent"94                 android:layout_height="wrap_content"95                 android:layout_marginBottom="8dp"96                 android:layout_marginTop="8dp">97 98                 <android.support.design.widget.TextInputEditText99                     android:id="@+id/edit_sign_up_password"
100                     android:layout_width="match_parent"
101                     android:layout_height="wrap_content"
102                     android:hint="密码"
103                     android:inputType="textPassword"
104                     tools:ignore="HardcodedText" />
105             </android.support.design.widget.TextInputLayout>
106 
107             <!--重复密码-->
108             <android.support.design.widget.TextInputLayout
109                 android:layout_width="match_parent"
110                 android:layout_height="wrap_content"
111                 android:layout_marginBottom="8dp"
112                 android:layout_marginTop="8dp">
113 
114                 <android.support.design.widget.TextInputEditText
115                     android:id="@+id/edit_sign_up_re_password"
116                     android:layout_width="match_parent"
117                     android:layout_height="wrap_content"
118                     android:hint="重复密码"
119                     android:inputType="textPassword"
120                     tools:ignore="HardcodedText" />
121             </android.support.design.widget.TextInputLayout>
122 
123             <android.support.v7.widget.AppCompatButton
124                 android:id="@+id/btn_sign_up"
125                 android:layout_width="match_parent"
126                 android:layout_height="wrap_content"
127                 android:layout_marginBottom="24dp"
128                 android:layout_marginTop="24dp"
129                 android:background="@android:color/holo_orange_dark"
130                 android:gravity="center"
131                 android:padding="12dp"
132                 android:text="注册"
133                 android:textColor="@android:color/white"
134                 tools:ignore="HardcodedText" />
135 
136             <android.support.v7.widget.AppCompatTextView
137                 android:id="@+id/tv_link_sign_in"
138                 android:layout_width="match_parent"
139                 android:layout_height="wrap_content"
140                 android:layout_marginBottom="24dp"
141                 android:gravity="center"
142                 android:text="已经注册了?请登录"
143                 android:textSize="16sp"
144                 tools:ignore="HardcodedText" />
145 
146         </android.support.v7.widget.LinearLayoutCompat>
147     </android.support.v4.widget.NestedScrollView>
148 </android.support.v7.widget.LinearLayoutCompat>

复制代码

回到顶部

1.2 注册信息的验证和逻辑

【布局控件的查找】

【输入注册信息的验证】

复制代码

 1 public class SignUpDelegate extends LatteDelegate {2 3     @BindView(R2.id.edit_sign_up_name)4     TextInputEditText mName = null;5     @BindView(R2.id.edit_sign_up_email)6     TextInputEditText mEmail = null;7     @BindView(R2.id.edit_sign_up_phone)8     TextInputEditText mPhone = null;9     @BindView(R2.id.edit_sign_up_password)
10     TextInputEditText mPassword = null;
11     @BindView(R2.id.edit_sign_up_re_password)
12     TextInputEditText mRePassword = null;
13 
14 
15     private boolean checkForm() {
16         final String name = mName.getText().toString();
17         final String email = mEmail.getText().toString();
18         final String phone = mPhone.getText().toString();
19         final String password = mPassword.getText().toString();
20         final String rePassword = mRePassword.getText().toString();
21 
22         boolean isPass = true;
23 
24         if (name.isEmpty()) {
25             mName.setError("请输入姓名");
26             isPass = false;
27         } else {
28             mName.setError(null);
29         }
30 
31         if (email.isEmpty() || !Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
32             mEmail.setError("错误的邮箱格式");
33             isPass = false;
34         } else {
35             mEmail.setError(null);
36         }
37 
38         if (phone.isEmpty() || phone.length() != 11) {
39             mPhone.setError("手机号码错误");
40             isPass = false;
41         } else {
42             mPhone.setError(null);
43         }
44 
45         if (password.isEmpty() || password.length() < 6) {
46             mPassword.setError("请填写至少6位数密码");
47             isPass = false;
48         } else {
49             mPassword.setError(null);
50         }
51 
52         if (rePassword.isEmpty() || rePassword.length() < 6 || !(rePassword.equals(password))) {
53             mRePassword.setError("密码验证错误");
54             isPass = false;
55         } else {
56             mRePassword.setError(null);
57         }
58 
59         return isPass;
60     }

复制代码

 

【测试】进入到注册的界面;

回到顶部

2.登录UI及验证逻辑实现

回到顶部

2.1 布局

 

 【源码】layout/delegate_sign_in.xml,支持微信第三方登录

复制代码

  1 <?xml version="1.0" encoding="utf-8"?>2 <android.support.v7.widget.LinearLayoutCompat 3     xmlns:android="http://schemas.android.com/apk/res/android"4     xmlns:tools="http://schemas.android.com/tools"5     android:layout_width="match_parent"6     android:layout_height="match_parent"7     android:orientation="vertical">8 9     <android.support.v7.widget.Toolbar10         android:layout_width="match_parent"11         android:layout_height="?attr/actionBarSize"12         android:background="@android:color/holo_orange_dark">13 14         <android.support.v7.widget.AppCompatTextView15             android:layout_width="match_parent"16             android:layout_height="match_parent"17             android:gravity="center"18             android:text="登录"19             android:textColor="@android:color/white"20             android:textSize="20sp"21             tools:ignore="HardcodedText" />22     </android.support.v7.widget.Toolbar>23 24     <android.support.v4.widget.NestedScrollView25         android:layout_width="match_parent"26         android:layout_height="match_parent">27 28         <android.support.v7.widget.LinearLayoutCompat29             android:layout_width="match_parent"30             android:layout_height="wrap_content"31             android:fitsSystemWindows="true"32             android:orientation="vertical"33             android:paddingLeft="24dp"34             android:paddingRight="24dp"35             android:paddingTop="56dp">36 37             <android.support.v7.widget.AppCompatImageView38                 android:layout_width="150dp"39                 android:layout_height="150dp"40                 android:layout_gravity="center_horizontal"41                 android:layout_marginBottom="24dp"42                 android:src="@mipmap/ic_launcher" />43 44             <!--邮箱-->45             <android.support.design.widget.TextInputLayout46                 android:layout_width="match_parent"47                 android:layout_height="wrap_content"48                 android:layout_marginBottom="8dp"49                 android:layout_marginTop="8dp">50 51                 <android.support.design.widget.TextInputEditText52                     android:id="@+id/edit_sign_in_email"53                     android:layout_width="match_parent"54                     android:layout_height="wrap_content"55                     android:hint="邮箱"56                     android:inputType="textEmailAddress"57                     tools:ignore="HardcodedText" />58             </android.support.design.widget.TextInputLayout>59 60             <!--密码-->61             <android.support.design.widget.TextInputLayout62                 android:layout_width="match_parent"63                 android:layout_height="wrap_content"64                 android:layout_marginBottom="8dp"65                 android:layout_marginTop="8dp">66 67                 <android.support.design.widget.TextInputEditText68                     android:id="@+id/edit_sign_in_password"69                     android:layout_width="match_parent"70                     android:layout_height="wrap_content"71                     android:hint="密码"72                     android:inputType="textPassword"73                     tools:ignore="HardcodedText" />74             </android.support.design.widget.TextInputLayout>75 76             <android.support.v7.widget.AppCompatButton77                 android:id="@+id/btn_sign_in"78                 android:layout_width="match_parent"79                 android:layout_height="wrap_content"80                 android:layout_marginBottom="24dp"81                 android:layout_marginTop="24dp"82                 android:background="@android:color/holo_orange_dark"83                 android:gravity="center"84                 android:padding="12dp"85                 android:text="登录"86                 android:textColor="@android:color/white"87                 tools:ignore="HardcodedText" />88 89             <android.support.v7.widget.AppCompatTextView90                 android:id="@+id/tv_link_sign_up"91                 android:layout_width="match_parent"92                 android:layout_height="wrap_content"93                 android:layout_marginBottom="24dp"94                 android:gravity="center"95                 android:text="还没有账户?现在注册吧"96                 android:textSize="16sp"97                 tools:ignore="HardcodedText" />98 99             <com.joanzapata.iconify.widget.IconTextView
100                 android:id="@+id/icon_sign_in_wechat"
101                 android:layout_width="100dp"
102                 android:layout_height="100dp"
103                 android:layout_gravity="center_horizontal"
104                 android:gravity="center"
105                 android:text="{fa-weixin}"
106                 android:textColor="#04b00f"
107                 android:textSize="40sp" />
108 
109         </android.support.v7.widget.LinearLayoutCompat>
110     </android.support.v4.widget.NestedScrollView>
111 </android.support.v7.widget.LinearLayoutCompat>

复制代码

 

回到顶部

2.2 登录的逻辑框架

复制代码

 1 package com.flj.latte.ec.sign;2 3 import android.app.Activity;4 import android.os.Bundle;5 import android.support.annotation.NonNull;6 import android.support.annotation.Nullable;7 import android.support.design.widget.TextInputEditText;8 import android.util.Patterns;9 import android.view.View;
10 import android.widget.Toast;
11 
12 import com.flj.latte.delegates.LatteDelegate;
13 import com.diabin.latte.ec.R;
14 import com.diabin.latte.ec.R2;
15 import com.flj.latte.net.RestClient;
16 import com.flj.latte.net.callback.ISuccess;
17 import com.flj.latte.util.log.LatteLogger;
18 import com.flj.latte.wechat.LatteWeChat;
19 import com.flj.latte.wechat.callbacks.IWeChatSignInCallback;
20 
21 import butterknife.BindView;
22 import butterknife.OnClick;
23 
24 public class SignInDelegate extends LatteDelegate {
25 
26     @BindView(R2.id.edit_sign_in_email)
27     TextInputEditText mEmail = null;
28     @BindView(R2.id.edit_sign_in_password)
29     TextInputEditText mPassword = null;
30 
31 
32     //点击登录按钮
33     @OnClick(R2.id.btn_sign_in)
34     void onClickSignIn() {
35         if (checkForm()) {
36            
37         }
38     }
39 
40     //点击微信第三方登录
41     @OnClick(R2.id.icon_sign_in_wechat)
42     void onClickWeChat() {
43         
44     }
45 
46     //跳转到注册的链接
47     @OnClick(R2.id.tv_link_sign_up)
48     void onClickLink() {
49         
50         getSupportDelegate().start(new SignUpDelegate());
51     }
52 
53     private boolean checkForm() {
54         final String email = mEmail.getText().toString();
55         final String password = mPassword.getText().toString();
56 
57         boolean isPass = true;
58 
59         if (email.isEmpty() || !Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
60             mEmail.setError("错误的邮箱格式");
61             isPass = false;
62         } else {
63             mEmail.setError(null);
64         }
65 
66         if (password.isEmpty() || password.length() < 6) {
67             mPassword.setError("请填写至少6位数密码");
68             isPass = false;
69         } else {
70             mPassword.setError(null);
71         }
72 
73         return isPass;
74     }
75 
76     @Override
77     public Object setLayout() {
78         return R.layout.delegate_sign_in;
79     }
80 
81     @Override
82     public void onBindView(@Nullable Bundle savedInstanceState, @NonNull View rootView) {
83 
84     }
85 }

复制代码

 【测试】

 

回到顶部

3.服务器数据简单介绍

回到顶部

3.1 服务器的数据

【说明】提前准备的json数据

回到顶部

3.2 数据端访问的数据

回到顶部

3.3 打印信息的级别类封装

【源码】com.flj.latte.util.log.LatteLogger

复制代码

 1 package com.flj.latte.util.log;2 3 import com.orhanobut.logger.Logger;4 5 /**6  * Created by 傅令杰 on 2017/4/227  */8 9 public final class LatteLogger {
10 
11     private static final int VERBOSE = 1;
12     private static final int DEBUG = 2;
13     private static final int INFO = 3;
14     private static final int WARN = 4;
15     private static final int ERROR = 5;
16     private static final int NOTHING = 6;
17 
18     //控制log等级
19     private static int LEVEL = VERBOSE;
20 
21     public static void v(String tag, String message) {
22         if (LEVEL <= VERBOSE) {
23             Logger.t(tag).v(message);
24         }
25     }
26 
27     public static void d(String tag, Object message) {
28         if (LEVEL <= DEBUG) {
29             Logger.t(tag).d(message);
30         }
31     }
32 
33     public static void d(Object message) {
34         if (LEVEL <= DEBUG) {
35             Logger.d(message);
36         }
37     }
38 
39     public static void i(String tag, String message) {
40         if (LEVEL <= INFO) {
41             Logger.t(tag).i(message);
42         }
43     }
44 
45     public static void w(String tag, String message) {
46         if (LEVEL <= WARN) {
47             Logger.t(tag).w(message);
48         }
49     }
50 
51     public static void json(String tag, String message) {
52         if (LEVEL <= WARN) {
53             Logger.t(tag).json(message);
54         }
55     }
56 
57     public static void e(String tag, String message) {
58         if (LEVEL <= ERROR) {
59             Logger.t(tag).e(message);
60         }
61     }
62 }

复制代码

 

【测试】通过输入登录的信息,可以返回需要的数据;

回到顶部

4.与基于GreenDao的数据库框架设计

【课程链接】https://www.imooc.com/learn/760

回到顶部

4.1 添加依赖和配置

回到顶部

4.2 创建entivity

【说明】【生成代码数据的显示】如果生成的代码以文件的形式显示出来,需要配置相应的代码路径;GreenDao的本意是不允许修改代码,一般不要修改,修改之后会出现莫名其妙的问题;

 

【GreenDao生成代码】

【说明】生成了很多的代码;

 【说明】GreenDao生成了一些DaoSession的内容,不要去修改;

回到顶部

4.3 openHelper类的创建

【说明】GreenDao在提供了openHelper类,但是在每次的APP打开之后,openHelper会将之前的APP的储存的数据删除掉,现在我们建立现在自己的配置类;

【说明】需要首先生成entivity之后才能书写此类,因为DaoMaster是基于entivity的;

 

回到顶部

4.4 功能的抽取

【功能的抽取】-新建类

【单例模式】【惰性加载】使用单例模式,使用Holder惰性加载;

【构造方法不可见】

【数据库的初始化】

回到顶部

4.5 数据的存储

【测试】

回到顶部

4.6 添加数据反射显示机制

【说明】简化使用终端查看的繁琐的步骤,使用facebook的依赖库;原理也是抽象层,reactNative;

【功能】查看数据库;将原生的界面映射到Web界面上;

 

【数据库的数据的显示】

【原生界面的显示】

回到顶部

5.用户状态与用户信息的回调封装 

【说明】我们需要用户状态的回调和用户信息的回调;需要创建一些接口;

回到顶部

5.1 注册的回调实例

【说明】登录和注册是登录APP的唯一的接口,没有必要分散在别的接口;在入口处理是最好的;

【增加注册的回调】

【测试】【逻辑的使用】注册成功,弹出土司;当然在此接口中可以做出一些其他的动作,比如发送统计信息等等;

 

回到顶部

5.2 登录回调的实例

【测试】

【插件工具】

回到顶部

5.3 登录注册的封装

【说明】登录和注册属于一体的内容,不应该分开独立,应该整合在一起;

 

【封装登录监听监听的接口】

【设置登录监听接口】

    • onAttach方法
      Fragment和Activity建立关联的时候调用(获得activity的传递的值)

【登录成功/失败的信息的保存】

【业务的调用】

 【测试】

【增加跳转页面】

【测试】

 

【第一次,可以登录成功了】

 【第二次启动,直接进入到信息页面】

回到顶部

 6. 框架的总结

【说明】看视频的最后三分钟;

【第一次打开APP】

 

【非第一次打开APP】

【记录是否登录/注册成功】此时就可以判断下次的启动登陆的逻辑了;

 

【说明】书写最少的代码,完成最多的逻辑;最后在example中书写的代码的数量很少;

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/53287.html

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

相关文章

让 GPT-4 设计一个分布式缓存系统,它从尝试到被“逼疯”!

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 比 ChatGPT 背后 GPT-3.5 更为强大的模型 GPT-4&#xff0c;已在上周正式对外发布。在 OpenAI 官方发布的 GPT-4 Developer Livestream&#xff08;https://www.youtube.com/watch?voutcGtbnMuQ&#…

增强型语言模型——走向通用智能的道路?!?

增强型语言模型——走向通用智能的道路&#xff1f;&#xff01;&#xff1f; FesianXu 20230325 at Baidu Search Team 前言 继AlphaGo在2016年横扫了人类棋手之后&#xff0c;2022年末的chatGPT横空出世&#xff0c;再次引爆了全球对人工智能技术的热情。基于语言模型的chat…

新版nonebot,go-cqhttp搭建qq机器人保姆级教程

前言 前段时间QQ进行了更新&#xff0c;所以导致了非手表协议扫码登陆报错的问题&#xff0c;不过好在大佬已经推出rc5版本的go-cqhttp&#xff0c;解决了这一头疼的问题 在开始之前&#xff0c;我需要说明一下&#xff0c;本文章是针对没有经验和基础的用户&#xff0c;所以…

文心一言初次体验,说说感觉~

文心一言&#xff0c;被称为国内版ChatGPT&#xff0c;一直被寄予厚望。 在未出来前&#xff0c;网络上都是各种调侃。 甚至还用ChatGPT来调侃。 但是在发布会的时候&#xff0c;感觉李彦宏关于文心一言讲了很多东西。 但是吧&#xff0c;又感觉啥也没讲&#xff0c;说话底气还…

王垠的过去和现状

王垠的过去和现状 转自&#xff1a;http://blog.csdn.net/simoncoder/article/details/49803827 我曾在2006年冬季接触到王垠的三篇文章&#xff1a;《完全用Linux工作》、《写给支持和反对<完全用Linux工作>的人们》、《清华梦的粉碎--写给清华大学的退学申请》&#…

百度副总裁 AIG总负责人王海峰:决胜AI时代(财新专访实录)

12月5日&#xff0c;百度副总裁、AI技术平台体系(AIG)总负责人、兼百度研究院院长王海峰接受了财新专访。 这里是视频地址&#xff08;复制链接打开&#xff09;&#x1f447; http://video.caixin.com/2017-12-05/101180688.html 王海峰表示&#xff0c;人工智能正在成为这个…

王慧文收购国产AI框架OneFlow,为中国版ChatGPT疯狂抢人抢基建

杨净 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT热潮下&#xff0c;人才已经被抢疯了。 现在&#xff0c;国内首起ChatGPT相关收购已经浮出水面。 据多方媒体消息&#xff0c;美团联创王慧文的光年之外与国产AI框架一流科技&#xff08;Oneflow&#xff09;将达成并购意向。 原…

拉开中兴帷幕 张朝阳再造搜狐

对于搜狐而言&#xff0c;如果能在媒体和视频这两条核心主线上走出一条不同的路径&#xff0c;未来持续增长当指日可期。 一点财经 刘书艳&#xff5c;作者 严 睿&#xff5c;编辑 减亏65.38%&#xff0c;营收同比增长6%&#xff0c;2020年Q1财报略超市场预期的搜狐信心满满&a…

人工智能领域研发热点回眸

本篇文章是博主在人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在学习摘录和笔记专…

ChatGPT on Notes/Domino

大家好&#xff0c;才是真的好。 随着春节过去&#xff0c;小盆友也开始陆续到幼儿园报到&#xff0c;我们又回来和大家一起继续Notes/Domino传奇之旅。 去年年底ChatGPT横空出世&#xff0c;让大家震惊了一把。 可能有些老Notes/Domino人&#xff0c;还不知道ChatGPT是什么…

阿里研究员吴翰清离职,下一步或将开启 AI 短视频创业

作者 | 苏宓 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 5 月 25 日&#xff0c;据 Tech 星球报道&#xff0c;阿里巴巴集团研究员吴翰清已从阿里离职&#xff0c;接下来其将深度拥抱 AI 新时代&#xff0c;投身于 AI 短视频赛道创业。 这位被阿里程序员誉为大…

最新!OpenAI掌门人自曝GPU短缺,未来GPT-4会更快、更便宜

作者 | 金鹿 本文经授权转自公众号腾讯科技&#xff08;ID:qqtech&#xff09;&#xff0c;如需转载&#xff0c;请联系对方&#xff1a; 机器学习和人工智能初创公司Humanloop首席执行官拉扎哈比比&#xff08;Raza Habib&#xff09;&#xff0c;5月29日邀请OpenAI首席执…

汇正财经靠谱吗?大盘窄幅震荡

盘面回顾&#xff1a; 沪指全天窄幅震荡&#xff0c;大金融银行板块涨超1%&#xff0c;截止收盘沪指小涨0.07%&#xff1b;创业板全天低迷&#xff0c;锂电、光伏、风电等新能源方向领跌&#xff0c;新能源权重票下挫拖累创指&#xff0c;截止收盘创业板指跌1.39%。传媒、旅游…

2023年股票开户哪家手续费最低?融资融券利息率最低多少?万1融5!支持量化交易的券商

2023年融资融券费率最低是多少&#xff1f;利率5%&#xff0c;股票万一全佣&#xff0c;支持量化交易 股票开户费率参考&#xff1a; 1、股票佣金万1.2&#xff0c;最低万1(含规费&#xff09;&#xff0c;信用账户一致 2、场内基金&#xff08;ETF、LOF&#xff09;万0.6&…

谷歌的智能AI聊天机器人Bard已免费开放申请,赶紧加入等待列表体验一把

前言 2023年&#xff0c;真是一个Ai元年&#xff0c;随意ChatGPT的大火&#xff0c;各路网络巨头都按捺不住了&#xff0c;Google更是一度启动了红色警报&#xff0c;这是有史以来&#xff0c;谷歌感受到最大的压力&#xff0c;不过谷歌平时也并不是没有技术沉淀的&#xff0c…

如何快速看懂别人的代码

我们在写程式时&#xff0c;有不少时间都是在看别人的代码。 例如看小组的代码&#xff0c;看小组整合的守则&#xff0c;若一开始没规划怎么看&#xff0c; 就会“噜看噜苦&#xff08;台语&#xff09; ” 不管是参考也好&#xff0c;从开源抓下来研究也好&#xff0c;为…

直播平台源码中的推拉流是什么

关于直播平台源码中的推流和拉流&#xff0c;最常用的就是RTMP和RTSP协议了 推流&#xff0c;指的是把采集阶段封包好的内容传输到服务器的过程&#xff0c;推流是直播端需要完成的步骤。拉流是指服务器已有直播内容&#xff0c;用指定地址进行拉取的过程&#xff0c;拉流是客…

视频号直播怎么玩儿?手把手教你实操全流程!

目前&#xff0c;想要入局视频号直播带货的商家越来越多了&#xff0c;围绕视频号直播&#xff0c;功能也更加完善&#xff0c;但很多人还是依旧不知道如何入手&#xff0c;那新手如何做好一次视频号直播呢&#xff1f;有哪些注意事项&#xff1f; 这篇文章&#xff0c;你算是看…

如何做直播?企业微信直播和小程序直播2个工具够用了!

直播获客已成为2020年的趋势&#xff0c;便捷的直播工具不可或缺。企业微信直播和小程序直播免费、不用安装其他额外的APP、无需注册、获客能力强等特性成为商家直播的必备工具。 企业微信直播 可满足学校为学生提供线上远程教学的需求&#xff0c;同时企业也可以通过群直播进…

简单地实现文章的查重

最近想要做一个查重程序&#xff0c;目的是检测大学生提交的电子文档的重复率。 最初的想法是是参考之王的论文查重&#xff0c;但是发现他有自己的弊端&#xff0c;也就是说知网论文查重的算法能对标准的论文进行有效的查重。但是对于学生提交的电子档作业就不一定行了。 我…