# phc.work.5.11 **Repository Path**: phcbest/phc.work.5.11 ## Basic Information - **Project Name**: phc.work.5.11 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 2020 05 11 1. 使用`ArrayList itemData = new ArrayList<>(Arrays.asList(itemString));` 可以将item数组中的 元素快速添加到集合中 2. 网络是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。 通信是人与人之间通过某种媒体进行的信息交流与传递。网络通信是通过网络将各个孤立的设备进行连接, 通过信息交换实现人与人,人与计算机,计算机与计算机之间的通信。 网络通信中最重要的就是网络通信协议。 当今网络协议有很多,局域网中最常用的有三个网络协议:MICROSOFT的NETBEUI、NOVELL的IPX/SPX和TCP/IP协议。 应根据需要来选择合适的网络协议。 3. 局域网(Local Area Network)是指在某一区域内由多台计算机互联成的计算机组, 简称LAN,局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成 城域网(Metropolitan Area Network)是在一个城市范围内所建立的计算机通信网,简称MAN,属宽带局域网。 广域网(Wide Area Network)也称远程网(long haul network ),简称WAN。 通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个城市或国家, 或横跨几个洲并能提供远距离通信,形成国际性的远程网络。 4. 在现实生活中有各司其职的典型事例,每一个岗位负责完成自己的任务, 并按着一定的规则向其他岗位传达信息,网络协议分层也与此类似。 网络协议分层(OSI模型)是计算机术语,是由国际标准化组织ISO创立的一个网络通讯模型。 网络协议分层是将应用程序所要发送的数据,通过分层将加载、发送、转发、打包、拆包等步骤放在不同层级中, 由不同的硬件和软件模块去完成。这样可以将往来通信和网络互连这一复杂的问题变得较为简单。 5. TCP/IP相当于国际通用语言,使用不同协议可以与不同的服务器和语言进行交互 。 6. TCP/IP协议簇包括了常用的HTTP、FTP、POP3协议、IP协议、IMCP协议,TCP协议等。 7. IP协议是Internet Protocol的外语缩写 IP协议是为网络中的计算机相互连接进行通信而设计的协议。 IP协议定义了IP地址的规范。 IP协议中有一个非常重要的内容---给因特网上的每台计算机和其它设备都规定一个唯一的地址,叫做“IP 地址”。 IP地址就像电话号码(地址码),每个连接在互联网上的主机都会分配一个32 bit(IPv4)或128 bit(IPv6)的地址。 IP地址以十进制的形式表示,中间使用符号“.”分开不同的字节。 # 2020 05 12 1. 什么是AsyncTask? AsyncTask是Android提供的轻量级(实现代码量少)的异步类 为了降低异步通信的开发难度,提供了AsyncTask。 AsyncTask直接继承于Object类,位于android.os包中。 使用AsyncTask可以忽略Looper、MessageQueue、Handler等复杂对象,更便捷的完成异步耗时操作。 2. AsyncTask的优缺点? 优点:使用AsyncTask处理单个异步任务时,简单、快捷,适用于下载、获取网络数据这样的场景。 缺点:AsyncTask处理多任务时,灵活度不高,过程不可控,最多只能控制5个线程。 3. 如何使用AsyncTask? 调用的时候会传递一个内部类进去,该内部类为接口,重写了该接口的逻辑,解耦 ``` //第二个参数为接口 httpUtil util = new httpUtil(this, new returndata() {}); //启动asyncTask util.execute("http://baobab.kaiyanapp.com/api/v4/tabs/selected?udid=100000&vc=168&vn=3" + ".3.1&deviceModel=xiaomi&first_channel=eyepetizer_baidu_market&last_channel=eyepetiz" + "er_baidu_market&system_version_code=20"); //asyncTask逻辑 public class httpUtil extends AsyncTask { private static final String TAG = "httpUtil"; Context context; returndata returndata_; private ProgressDialog progressDialog; private BufferedReader reader; public httpUtil(Context context, returndata returndata_) { this.context = context; this.returndata_ = returndata_; } @Override protected void onPreExecute() { super.onPreExecute(); //显示一个进度 progressDialog = new ProgressDialog(context); progressDialog.setTitle("努力加载中~~~~~"); progressDialog.setIndeterminate(true); progressDialog.show(); } /** * 子线程任务 * @param strings * @return */ @Override protected Boolean doInBackground(String... strings) { try { URL url = new URL(strings[0]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); InputStream inputStream = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(inputStream)); String line ; StringBuilder json = new StringBuilder(); while ((line=reader.readLine()) != null ){ json.append(line); } publishProgress(json.toString()); //关闭流 inputStream.close(); connection.disconnect(); } catch (Exception e) { e.printStackTrace(); } return false; } @Override protected void onProgressUpdate(String... values) { super.onProgressUpdate(values); //接口回调将参数传递出去 returndata_.back(values[0]); } @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); progressDialog.cancel(); } } ``` # 2020 05 13 1. 什么是数据存储? 在商业APP中经常需要收集用户的信息、保存配置信息等,这些数据都必须以某种方式保存,不能丢失,并且能够有效、 简洁地使用和更新处理,这种保存数据的方式称之为数据存储 2. 数据存储的分类有几种? SharedPreferences存储 File存储 数据库存储 3. 什么是SharedPreferences? SharedPreferences常用来存储一些轻量级的数据,以key-value(键值对)形式存储数据, 当用户卸载此应用程序时,数据会一并清除。 4. 如何使用SharedPreferences读写数据? ```SharedPreferences preferences; SharedPreferences.Editor editor; preferences=context.getSharedPreferences("data",Context.MODE_PRIVATE); editor=preferences.edit(); editor.putInt("index", position); editor.apply(); index=preferences.getInt("index",0); ``` 5. File存储分为几种? 1内部存储 将文件存在/data目录下,称之为内部存储。 Android系统提供了相应的API,可以直接把文件存在设备的内部存储内,通过Java的I/O流的方式进行读写, 当用户卸载此应用程序时,内部存储的数据会一并清除。 外部存储 将文件存在用户自己添加的外部存储介质中(/data以外的目录),称之为外部存储, 在Java中已经学过I/O流的知识,在Android中的操作和在Java学习I/O流时的操作基本一致。 # 2020 05 14 1. 为什么要使用SQLite? SharedPreferences是以XML形式存储数据的,只适合存储基本数据类型的数据 文件存储的内容在提取(解析)数据时,相对复杂 当数据量大、结构复杂时,如果使用SharedPreferences和文件存储对数据的操作将变得非常复杂, 容易出错,效率低下,Android中提供了SQLite数据存储,帮助我们解决这些问题。 2. 什么是SQLite SQLite数据库存储是Android系统提供的数据存储方式之一。 SQLite是专为嵌入式设备设计的一款轻量级数据库。 SQLite占用资源非常低,在嵌入式设备中,只需要几百K的内存 SQLite支持标准的SQL语法,遵循数据库的ACID事务。 SQLite不需要安装,不需要用户名密码就可以使用。 3. 如何创建数据库和数据表? 新建类继承SQLiteOpenHelper 实现构造方法; 重写onCreate方法; 重写onUpgrade方法; 实例化SQLiteOpenHelper的子类对象,例如本例的DBHelp类 调用getReadableDatabase方法或 getWritableDatabase方法。 4. 如何添加数据? ``` private void insertData(){ DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this, DATABASE_NAME); SQLiteDatabase sqldb = databaseHelper.getWritableDatabase(); ContentValues mContentValues = new ContentValues(); mContentValues.put("name", nameEt.getText().toString()); mContentValues.put("age", ageEt.getText().toString()); mContentValues.put("sex", sexEt.getText().toString()); sqldb.insert(TABLE_NAME, null, mContentValues); } ``` 5. 如何修改数据? ```private void updateData(){ DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this, DATABASE_NAME); SQLiteDatabase sqldb = databaseHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("age", ageEt.getText().toString()); values.put("sex",sexEt.getText().toString() ); String whereClause = "name=?"; int flag = sqldb.update(TABLE_NAME, values, whereClause,new String[]{nameEt.getText().toString()}); }```