-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
注:
1、如果你只需要Bmob提供的短信功能,那么你只需单独配置bmob-sms,如果你既需要bmob的数据服务,也需要短信服务,那么你只需要配置bmob-sdk即可。
2、每个版本的im都对应特定版本的bmob-sdk,如果你使用的是1.1.8版本的im,那么配套的bmob-sdk的版本为3.3.5。使用的是1.1.9配套的bmob-sdk的版本为3.4.3.
3、与okhttp有关的配置依赖不是必填项,开发者可以不添加该依赖。
Eclipse
直接拷贝到lib目录下

下面的例子均在Eclipse环境下完成
2.添加权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_LOGS"/>
-
1
-
2
-
3
-
4
-
5
-
6
-
1
-
2
-
3
-
4
-
5
-
6
3.初始化BmobSDK
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // 初始化 Bmob SDK // 使用时请将第二个参数Application ID替换成你在Bmob服务器端创建的Application ID Bmob.initialize(this, "Your Application ID"); } }
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
首先我们把布局添加一下

layout_main.xml
<LinearLayout xmlns: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" > <Button android:id="@+id/btn_add" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="添加数据" /> <Button android:id="@+id/btn_update" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="更新数据" /> <Button android:id="@+id/btn_delete" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="删除数据" /> <Button android:id="@+id/btn_query" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="查询数据" /> </LinearLayout>
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
然后实例化这四个Button
private Button btn_add, btn_update, btn_delete, btn_query;
-
1
-
1
btn_add = (Button) findViewById(R.id.btn_add); btn_add.setOnClickListener(this); btn_update = (Button) findViewById(R.id.btn_update); btn_update.setOnClickListener(this); btn_delete = (Button) findViewById(R.id.btn_delete); btn_delete.setOnClickListener(this); btn_query = (Button) findViewById(R.id.btn_query); btn_query.setOnClickListener(this);
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
因为考虑到有四个点击事件,我们直接implements OnClickListener这样也许更直观一点,所以onClick()方法就是这个样子了
@Override public void onClick(View v) { switch (v.getId()) { //添加数据 case R.id.btn_add: break; //更新数据 case R.id.btn_update: break; //删除数据 case R.id.btn_delete: break; //查询数据 case R.id.btn_query: break; } }
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
准备工作差不多都做完了?No,还有一件非常重要的事情要做
1.创建JavaBean
我们新建一个类继承BmobObject,具体操作看注释
package com.lgl.bmobdemo; import cn.bmob.v3.BmobObject; /** * javabean * * @author lgl * */ public class Bean extends BmobObject { /** * 这个javabean必须视情况而定,也就是你需要你的表上有什么信息你就加什么,当然,前提是,你的表单上有 * 添加表单可以在Bmob应用控制-数据浏览页面操作,后续会讲到 这里,我们假设有三个信息数据,分别是姓名,年龄,分数 */ private String name; private int age; private int score; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } }
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
2.添加数据
其实就是调用了Bean的get,set方法
case R.id.btn_add: // new出这个bean Bean bean = new Bean(); // 分别设置相应的信息 bean.setName("刘桂林"); bean.setAge(20); bean.setScore(100); bean.save(this, new SaveListener() { @Override public void onSuccess() { // 成功 Toast.makeText(MainActivity.this, "保存成功", 1) .show(); } @Override public void onFailure(int arg0, String arg1) { // 失败 Toast.makeText(MainActivity.this, "保存失败", Toast.LENGTH_LONG) .show(); } }); break;
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
我们运行程序,然后点击添加数据,当弹出Toast说明保存成功后,我们回到Bmob官网,找到我们的项目,点击数据浏览,就会看到已经保存的信息,这个就是我们的后台了

3.更新数据
更新数据,就是更新一条数据的记录,就像你修改个人信息,本来是男,现在要修改成女一样,但是,我们必须知道一点,就是如下图所示的objectid

假设我先现在知道这个id,那我们的操作就可以这样
case R.id.btn_update: bean = new Bean(); bean.setObjectId("edec38a77d"); bean.setName("修改刘桂林"); bean.setScore(30); bean.update(this, new UpdateListener() { @Override public void onSuccess() { // 成功 Toast.makeText(MainActivity.this, "更新成功", 1).show(); } @Override public void onFailure(int arg0, String arg1) { // 失败 Toast.makeText(MainActivity.this, "更新失败", 1).show(); } }); break;
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
然后我们来运行程序,点击更新数据,然后我们回到后台去查看

4.删除数据
同样的,你要删除一条数据,你还得知道人家的objectid
case R.id.btn_delete: bean = new Bean(); bean.setObjectId("edec38a77d"); bean.delete(this, new DeleteListener() { @Override public void onSuccess() { //成功 Toast.makeText(MainActivity.this, "删除成功", 1).show(); } @Override public void onFailure(int arg0, String arg1) { //失败 Toast.makeText(MainActivity.this, "删除失败", 1).show(); } }); break;
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
然后我们运行程序,点击删除数据后回到后台

可以看到,表明bean还在,但是数据已经被删除了
5.查询数据
这几个数据操作,唯一不同的就是查询了,他必须使用到一个查询的类BmobQuery
case R.id.btn_query: // BmobQuery<要查询的数据表> 项目一般不会只有一张表的 BmobQuery<Bean> query = new BmobQuery<Bean>(); query.findObjects(this, new FindListener<Bean>() { @Override public void onSuccess(List<Bean> arg0) { // 成功 Toast.makeText(MainActivity.this, "查询成功"+arg0.size(), 1).show(); } @Override public void onError(int arg0, String arg1) { // 失败 Toast.makeText(MainActivity.this, "查询失败", 1).show(); } }); break;
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
然后我们点击查询之后,他返回的是一个List,这里我们就不详细看List里面有什么了,表里只有一条数据,我们直接Toast他的size

5.1条件查询
跟数据库操作是一样的,你可以根据条件来查询,看代码
case R.id.btn_query: // BmobQuery<要查询的数据表> 项目一般不会只有一张表的 BmobQuery<Bean> query = new BmobQuery<Bean>(); //条件查询 我们查询名称是刘桂林的数据 query.addWhereEqualTo("name", "刘桂林"); query.findObjects(this, new FindListener<Bean>() { @Override public void onSuccess(List<Bean> arg0) { // 成功 // Toast.makeText(MainActivity.this, "查询成功"+arg0.size(), 1).show(); for (Bean bean : arg0) { Toast.makeText(MainActivity.this, "查询成功"+bean.getName()+"---"+bean.getAge(), 1).show(); } } @Override public void onError(int arg0, String arg1) { // 失败 Toast.makeText(MainActivity.this, "查询失败", 1).show(); } }); break;
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
运行的结果

5.2单条查询
case R.id.btn_query: // BmobQuery<要查询的数据表> 项目一般不会只有一张表的 BmobQuery<Bean> query = new BmobQuery<Bean>(); // 查询单条数据 query.getObject(this, "9fe91ce9a6", new GetListener<Bean>() { @Override public void onFailure(int arg0, String arg1) { // 失败 Toast.makeText(MainActivity.this, "查询失败", 1).show(); } @Override public void onSuccess(Bean bean) { // 成功 Toast.makeText(MainActivity.this, bean.getName()+","+bean.getAge(), 1).show(); } }); break;
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
这里你要单条数据查询的话,你就必须只带objectid才行,这里就不演示了
Demo下载地址:http://download.youkuaiyun.com/detail/qq_26787115/9379591
前面废话啰嗦了也有一大堆了,现在来聊聊实际点的东西,Bmob他毕竟是一个后台数据管理的平台,所以前面才说了一堆的数据操作,我们接下来要实现的功能就是用户的注册和登录。
1.注册
Bmob实现登录注册,还有邮箱验证的功能,其实就是利用上面的数据操作,也就是增删查改
我们进入后台会看到用户表单里面有一些字段

这可不是固定的,而是根据我们的需求可以增加或者删除的,默认的是最基本的
我们为了方便,新建一个工程BmobTest,然后把架包放在lib目录下,添加相应的权限以及在onCreate()方法里初始化Bmob,准备工作做完了之后,我们开始写代码:
我们还是用回上面的哪个Bean,因为用户名和密码是不需要复写的,不过这里特别需要注意的是,这次我们不是继承BmobObject,而是继承BmobUser;
**
我们要先搭建一个工程
activity_main.xml

<LinearLayout xmlns: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" > <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名" /> <EditText android:id="@+id/et_pass" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入密码" /> <Button android:id="@+id/btn_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="登录" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:orientation="horizontal" > <TextView android:id="@+id/tv_etpass" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="修改密码" /> <TextView android:id="@+id/tv_register" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="注册用户" /> </LinearLayout> </LinearLayout>
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
activity_register.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名" /> <EditText android:id="@+id/et_pass" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入密码" /> <Button android:id="@+id/btn_register" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="注册" /> </LinearLayout>
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
布局就是这样,想必跳转的逻辑也不用说了吧,很简单的一个例子,那我们先来注册:
RegisterActivity
package com.lgl.bmobtest; import cn.bmob.v3.listener.SaveListener; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class RegisterActivity extends Activity { private Button btn_register; private EditText et_name, et_pass; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); btn_register = (Button) findViewById(R.id.btn_register); et_name = (EditText) findViewById(R.id.et_name); et_pass = (EditText) findViewById(R.id.et_pass); btn_register.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Bean bean = new Bean(); // 设置的内容可以不需要,这里为了简便直接写死了 bean.setName("刘桂林"); bean.setAge(20); bean.setScore(100); bean.setUsername(et_name.getText().toString()); bean.setPassword(et_pass.getText().toString()); bean.signUp(RegisterActivity.this, new SaveListener() { @Override public void onSuccess() { // 如果注册成功,就finish()掉,也就是退回主界面 finish(); } @Override public void onFailure(int arg0, String arg1) { Toast.makeText(RegisterActivity.this, "注册失败", Toast.LENGTH_LONG).show(); } }); } }); } }
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
我们把项目部署在模拟器上

点击注册之后直接就finish()了说明注册成功了,我们进Bmob后端控制台去看一下

表里面有数据,说明我们已经注册成功了
用户名是12345 密码是67890
2.登录
登录其实是比较简单的
case R.id.btn_login: Bean bean = new Bean(); bean.setUsername(et_name.getText().toString()); bean.setPassword(et_pass.getText().toString()); bean.login(this, new SaveListener() { @Override public void onSuccess() { Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_LONG) .show(); } @Override public void onFailure(int arg0, String arg1) { Toast.makeText(MainActivity.this, "账号或密码错误", Toast.LENGTH_LONG).show(); } }); break;
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
1
-
2
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。







既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)

总结
可以看出,笔者的工作学习模式便是由以下 「六个要点」 组成:
❝ 多层次的工作/学习计划 + 番茄工作法 + 定额工作法 + 批处理 + 多任务并行 + 图层工作法❞
希望大家能将这些要点融入自己的工作学习当中,我相信一定会工作与学习地更富有成效。
下面是我学习用到的一些书籍学习导图,以及系统的学习资料。每一个知识点,都有对应的导图,学习的资料,视频,面试题目。
**如:我需要学习 **Flutter的知识。(大家可以参考我的学习方法)
- Flutter 的思维导图(无论学习什么,有学习路线都会事半功倍)

- Flutter进阶学习全套手册

- Flutter进阶学习全套视频

大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。
sdn.net/20160101223249970)
表里面有数据,说明我们已经注册成功了
用户名是12345 密码是67890
2.登录
登录其实是比较简单的
case R.id.btn_login: Bean bean = new Bean(); bean.setUsername(et_name.getText().toString()); bean.setPassword(et_pass.getText().toString()); bean.login(this, new SaveListener() { @Override public void onSuccess() { Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_LONG) .show(); } @Override public void onFailure(int arg0, String arg1) { Toast.makeText(MainActivity.this, "账号或密码错误", Toast.LENGTH_LONG).show(); } }); break;
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
1
-
2
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-6R1k39YU-1712080262364)]
[外链图片转存中…(img-qpa3zFI1-1712080262365)]
[外链图片转存中…(img-iiTwDS8X-1712080262365)]
[外链图片转存中…(img-nSd0OkeT-1712080262365)]
[外链图片转存中…(img-Bo142BVq-1712080262366)]
[外链图片转存中…(img-JWWVE1n2-1712080262366)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-djcPF7RF-1712080262366)]
总结
可以看出,笔者的工作学习模式便是由以下 「六个要点」 组成:
❝ 多层次的工作/学习计划 + 番茄工作法 + 定额工作法 + 批处理 + 多任务并行 + 图层工作法❞
希望大家能将这些要点融入自己的工作学习当中,我相信一定会工作与学习地更富有成效。
下面是我学习用到的一些书籍学习导图,以及系统的学习资料。每一个知识点,都有对应的导图,学习的资料,视频,面试题目。
**如:我需要学习 **Flutter的知识。(大家可以参考我的学习方法)
- Flutter 的思维导图(无论学习什么,有学习路线都会事半功倍)
[外链图片转存中…(img-F48IawHL-1712080262367)]
- Flutter进阶学习全套手册
[外链图片转存中…(img-8sepTKQa-1712080262367)]
- Flutter进阶学习全套视频
[外链图片转存中…(img-HIIEXOrC-1712080262367)]
大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。
491

被折叠的 条评论
为什么被折叠?



