Android零基础入门第83节:Activity间数据传递方法汇总

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

   在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递。

0HkVmFfmECm

 

 

一、常用数据类型

 

    在前面几节我们只学习了一些常用类型的数据传递,主要是以下这些重载方法:

  • putExtra(String name, boolean value)

  • putExtra(String name, byte value)

  • putExtra(String name, char value)

  • putExtra(String name, short value)

  • putExtra(String name, int value)

  • putExtra(String name, long value)

  • putExtra(String name, float value)

  • putExtra(String name, double value)

  • putExtra(String name, String value)

  • putExtra(String name, CharSequence value)

  • putExtras(Intent src)

  • putExtras(Bundle extras)

  • putExtra(String name, Bundle value)

  • getBooleanExtra(String name, boolean defaultValue)

  • getByteExtra(String name, byte defaultValue)

  • getCharExtra(String name, char defaultValue)

  • getShortExtra(String name, short defaultValue)

  • getIntExtra(String name, int defaultValue)

  • getLongExtra(String name, long defaultValue)

  • getFloatExtra(String name, float defaultValue)

  • getDoubleExtra(String name, double defaultValue)

  • getStringExtra(String name)

  • getCharSequenceExtra(String name)

  • getExtras()

  • getBundleExtra(String name)

    可以发现主要包括boolean、byte、char、short、int、long、float、double、String、CharSequence几个,当然也可以先将数据打包为Bundle或Intent对象再传递。

 

 

二、数组、列表类型数据

 

    然而在实际开发中经常会遇见以上常用类型的数组或列表的组合型数据,其实也非常简单。

1、数组

    认真的同学可能已经发现了,每一个基本数据类型都有对应数组数据的重载方法,分别如下:

  • putExtra(String name, boolean[] value)

  • putExtra(String name, byte[] value)

  • putExtra(String name, short[] value)

  • putExtra(String name, char[] value)

  • putExtra(String name, int[] value)

  • putExtra(String name, long[] value)

  • putExtra(String name, float[] value)

  • putExtra(String name, double[] value)

  • putExtra(String name, String[] value)

  • putExtra(String name, CharSequence[] value)

  • getBooleanArrayExtra(String name)

  • getByteArrayExtra(String name)

  • getShortArrayExtra(String name)

  • getCharArrayExtra(String name)

  • getIntArrayExtra(String name)

  • getLongArrayExtra(String name)

  • getFloatArrayExtra(String name)

  • getDoubleArrayExtra(String name)

  • getStringArrayExtra(String name)

  • getCharSequenceArrayExtra(String name)

   putExtra()方法的参数简单替换为数组类型的即可,然后使用数组的专用方法获取,使用起来也非常简单。

 

2、列表 

    在传递列表型数据的时候稍微有一些不同了,Intent还提供了以下这几个重载方法:

  • putIntegerArrayListExtra(String name, ArrayList<Integer> value)

  • putStringArrayListExtra(String name, ArrayList<String> value)

  • putCharSequenceArrayListExtra(String name, ArrayList<CharSequence> value)

  • getIntegerArrayListExtra(String name)

  • getStringArrayListExtra(String name)

  • getCharSequenceArrayListExtra(String name)

    从以上几个方法可以知道,Intent自带传递Integer、String、CharSequence三种类型的列表数据,如果需要传递到额数据是这几种类型,或能够转换为这几种类型,那么数据的传递也变得很顺利了。

 

 

三、对象

 

    前面学习的几个方法使用起来还是比较简单的,但是会发现一个问题,以上学习的方法无法传输对象(如图片)、对象的数组或集合,那就需要用到以下这些方法了。

    intent还有以下这些重载方法:

  • putExtra(String name, Serializable value)

  • putExtra(String name, Parcelable value)

  • putExtra(String name, Parcelable[] value)

  • putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)

  • getSerializableExtra(String name)

  • getParcelableExtra(String name)

  • getParcelableArrayExtra(String name)

  • getParcelableArrayListExtra(String name)

    可能你已经发现了,这里提到的Serializable类型和Parcelable类型数据到底是什么呢?接下来分别来学习。

1、序列化对象Serializable

    Serializable接口是启用其序列化功能的接口,实现java.io.Serializable 接口的类是可序列化的,没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化(如果不懂序列化,建议复习巩固Java部分的序列化知识模块)。

    Serializable实现序列化的方法也很简单,将需要序列化的类实现Serializable接口,Serializable接口中没有任何方法,只需在类中指定serialVersionUID的值,该值可以任意指定一个值。可以理解为一个标记,即表明这个类可以序列化。

    假如需要使用Intent传递一个Person对象,就先要将其序列化,如下示例代码:

package com.jinyu.cqkxzsxy.android.activity.equipmentupdate.entity;import java.io.Serializable;/*** @创建者 鑫鱻* @描述 Android零基础入门到精通系列教程* 首发微信公众号分享达人秀(ShareExpert)*/
public class Person implements Serializable {private static final long serialVersionUID = 1L; // 序列化IDprivate String name; // 姓名private int age; // 年龄public Person() {this.name = "未知";this.age = 18;}public Person(String name, int age) {this.name = name;this.age = age;}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;}
}

    然后即可调用前面的put和get方法来传递复杂对象数据了。

 

2、序列化对象Parcelable 

    由于Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC,会影响持续性能。在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。

    实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。实现步骤如下:

  1. 将需要序列化的类实现Parcelable接口。

  2. 重写writeToParcel方法,将对象序列化为一个Parcel对象。

  3. 重写describeContents方法,描述内容接口,默认返回0。实例化静态内部对象CREATOR实现接口Parcelable.Creator。其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。需重写本接口中的两个方法:

    • createFromParcel(Parcel in) 实现从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。

    • newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话即可(return new T[size]),供外部类反序列化本类数组使用。

    接下来将上面的Person类进行改造,代码如下:

package com.jinyu.cqkxzsxy.android.activity.equipmentupdate.entity;import android.os.Parcel;
import android.os.Parcelable;/*** @创建者 鑫鱻* @描述 Android零基础入门到精通系列教程* 首发微信公众号分享达人秀(ShareExpert)*/
public class Person implements Parcelable {private String name; // 姓名private int age; // 年protected Person(Parcel in) {// 在读取Parcel容器里的数据时,必须按成员变量声明的顺序读取数据,不然会出现获取数据出错name = in.readString();age = in.readInt();}public static final Creator<Person> CREATOR = new Creator<Person>() {// 再通过createFromParcel将Parcel对象映射成原对象@Overridepublic Person createFromParcel(Parcel in) {return new Person(in);}// 供外部类反序列化本类数组使用@Overridepublic Person[] newArray(int size) {return new Person[size];}};// 内容接口描述,默认返回0即可@Overridepublic int describeContents() {return 0;}// 按照声明顺序打包数据到Parcel对象中,既将数据打包到Parcel容器中@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(name);dest.writeInt(age);}public Person() {this.name = "未知";this.age = 18;}public Person(String name, int age) {this.name = name;this.age = age;}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;}
}

    然后即可调用前面的put和get方法来传递复杂对象数据了,当然也可以是对象的数组或列表型数据。

    在使用中需要注意的是,Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable。

 

 

四、全局Application

 

    如果需要将一个对象在多个Activity之间传递,或者要连续传递好几层,这种情况下如果使用以上方法就需要重复多次,使用起来就特别别扭,这种情况就可以考虑使用全局Application。

    Android系统在每个程序运行的时候都会创建一个Application对象,而且只会创建一个,所以Application 是单例(singleton)模式的一个类,而且Application对象的生命周期是整个程序中最长的,他的生命周期等于这个程序的生命周期。如果想存储一些值,使用 Application就需要自定义类实现Application类,然后在AndroidManifest.xml中使用我们自定义的Application 而非系统默认的。

    这里简单使用一个示例来学习,这里简化为全局保存一个状态值,可以方便在各Activity中进行传递。首先自定义Application类,代码如下:

package com.jinyu.cqkxzsxy.android.activity.equipmentupdate;import android.app.Application;/*** @创建者 鑫鱻* @描述 Android零基础入门到精通系列教程* 首发微信公众号分享达人秀(ShareExpert)*/
public class MyApplication extends Application {private int state;public int getState() {return state;}public void setState(int state) {this.state = state;}
}

    然后在AndroidManifest.xml中声明,为application标签添加android:name属性,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.jinyu.cqkxzsxy.android.activity.equipmentupdate"><applicationandroid:name=".MyApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"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></application>
</manifest>

    最后在需要使用定义的全局变量的地方即可调用,核心代码如下:

package com.jinyu.cqkxzsxy.android.activity.equipmentupdate;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;public class TestActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_shop);// ...MyApplication app = (MyApplication) getApplicationContext();// 保存数据app.setState(1);// ...// 读取数据int state = app.getState();// ...}
}

    这样就非常方便的在各Activity之间进行数据传递了。如果想要在整个应用程序中任何位置都能使用,可以对MyApplication类进行适当的改造,这里不做过多说明。

    但是需要注意的是,当由于某些原因(比如系统内存不足),我们的app会被系统强制杀死,此时再次点击进入应用时,系统会直接进入被杀死前的那个界面,制造一种从来没有被杀死的假象。那么问题来了,系统强制停止了应用,进程死了,那么再次启动时Application自然新的,那里边的数据自然木有啦,如果直接使用很可能报空指针或者其他错误。

    所以在使用时一定要做好非空判断,如果数据为空可以考虑逻辑上让应用直接返回到最初的Activity。

 

 

五、单例模式

 

    上面的Application就是基于单例的,单例模式的特点就是可以保证系统中一个类有且只有一个实例。

    这里做一个简单的示例,如定义一个数据持有者类,代码如下:

package com.jinyu.cqkxzsxy.android.activity.equipmentupdate.entity;/*** @创建者 鑫鱻* @描述 Android零基础入门到精通系列教程* 首发微信公众号分享达人秀(ShareExpert)*/public class DataHolder {private String data;public String getData() {return data;}public void setData(String data) {this.data = data;}private static final DataHolder holder = new DataHolder();public static DataHolder getInstance() {return holder;}
}

    然后在使用的地方即可直接调用,如下所示:

  1.    // 更新数据

  2.    DataHolder.getInstance().setData(data);

  3.  

  4.    // 获取数据

  5.    Stringdata=DataHolder.getInstance().getData();

    这样使用起来也非常简单。

 

 

六、静态变量

 

    这个可以直接在Activity中完成单独一个数据结构,和单例差不多。

    这里将上面的单例模式类简单修改,代码如下:

package com.jinyu.cqkxzsxy.android.activity.equipmentupdate.entity;/*** @创建者 鑫鱻* @描述 Android零基础入门到精通系列教程* 首发微信公众号分享达人秀(ShareExpert)*/public class DataHolder {private static String data;public static String getData() {return data;}public static void setData(String strData) {data = strData;}
}

    这样就可以在启动Activity之前设置数据,新的Activity中获取数据。

  1.    // 更新数据

  2.    DataHolder.setData(data);

  3.  

  4.    // 获取数据

  5.    Stringdata=DataHolder.getData();

    需要注意的是,如果数据很大很多(如bitmap),处理不当是很容易导致内存泄露或者内存溢出的,可以考虑使用WeakReferences 将数据包装起来。

    除了以上介绍的几种方式,还可以使用持久化数据等方法,这里先不做过多介绍,在后续的学习中会陆续接触到。

 

    今天就先到这里,如果有问题欢迎留言一起探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!

    如果该系列分享对你有帮助,就动动手指关注、点赞、留言吧,你的互动就是对我最大的鼓励!

   此文章版权为微信公众号分享达人秀(ShareExpert)——鑫鱻所有,若需转载请联系作者授权,特此声明!

 

往期总结回顾:

Android零基础入门第1节:Android的前世今生

Android零基础入门第2节:Android 系统架构和应用组件那些事

Android零基础入门第3节:带你一起来聊一聊Android开发环境

Android零基础入门第4节:正确安装和配置JDK, 高富帅养成第一招

Android零基础入门第5节:善用ADT Bundle, 轻松邂逅女神

Android零基础入门第6节:配置优化SDK Manager, 正式约会女神

Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅

Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点

Android零基础入门第9节:Android应用实战,不懂代码也可以开发

Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio

Android零基础入门第11节:简单几步带你飞,运行Android Studio工程

Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌

Android零基础入门第13节:Android Studio个性化配置,打造开发利器

Android零基础入门第14节:使用高速Genymotion,跨入火箭时代

Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航

Android零基础入门第16节:Android用户界面开发概述

Android零基础入门第17节:文本框TextView

Android零基础入门第18节:输入框EditText

Android零基础入门第19节:按钮Button

Android零基础入门第20节:复选框CheckBox和单选按钮RadioButton

Android零基础入门第21节:开关组件ToggleButton和Switch

Android零基础入门第22节:图像视图ImageView

Android零基础入门第23节:图像按钮ImageButton和缩放按钮ZoomButton

Android零基础入门第24节:自定义View简单使用,打造属于你的控件

Android零基础入门第25节:简单且最常用的LinearLayout线性布局

Android零基础入门第26节:两种对齐方式,layout_gravity和gravity大不同

Android零基础入门第27节:正确使用padding和margin

Android零基础入门第28节:轻松掌握RelativeLayout相对布局

Android零基础入门第29节:善用TableLayout表格布局

Android零基础入门第30节:两分钟掌握FrameLayout帧布局

Android零基础入门第31节:少用的AbsoluteLayout绝对布局

Android零基础入门第32节:新推出的GridLayout网格布局

Android零基础入门第33节:Android事件处理概述

Android零基础入门第34节:Android中基于监听的事件处理

Android零基础入门第35节:Android中基于回调的事件处理

Android零基础入门第36节:Android系统事件的处理

Android零基础入门第37节:初识ListView

Android零基础入门第38节:初识Adapter

Android零基础入门第39节:ListActivity和自定义列表项

Android零基础入门第40节:自定义ArrayAdapter

Android零基础入门第41节:使用SimpleAdapter

Android零基础入门第42节:自定义BaseAdapter

Android零基础入门第43节:ListView优化和列表首尾使用

Android零基础入门第44节:ListView数据动态更新

Android零基础入门第45节:网格视图GridView

Android零基础入门第46节:列表选项框Spinner

Android零基础入门第47节:自动完成文本框AutoCompleteTextView

Android零基础入门第48节:可折叠列表ExpandableListView

Android零基础入门第49节:AdapterViewFlipper图片轮播

Android零基础入门第50节:StackView卡片堆叠

Android零基础入门第51节:进度条ProgressBar

Android零基础入门第52节:自定义ProgressBar炫酷进度条

Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar

Android零基础入门第54节:视图切换组件ViewSwitcher

Android零基础入门第55节:ImageSwitcher和TextSwitcher

Android零基础入门第56节:翻转视图ViewFlipper

Android零基础入门第57节:DatePicker和TimePicker选择器

Android零基础入门第58节:数值选择器NumberPicker

Android零基础入门第59节:常用三大Clock时钟组件

Android零基础入门第60节:日历视图CalendarView和定时器Chronometer

Android零基础入门第61节:滚动视图ScrollView

Android零基础入门第62节:搜索框组件SearchView

Android零基础入门第63节:值得借鉴学习的选项卡TabHost

Android零基础入门第64节:揭开RecyclerView庐山真面目

Android零基础入门第65节:RecyclerView分割线开发技巧

Android零基础入门第66节:RecyclerView点击事件处理

Android零基础入门第67节:RecyclerView数据动态更新

Android零基础入门第68节:RecyclerView添加首尾视图

Android零基础入门第69节:ViewPager快速实现引导页

Android零基础入门第70节:ViewPager打造TabHost效果

Android零基础入门第71节:CardView简单实现卡片式布局

Android零基础入门第72节:SwipeRefreshLayout下拉刷新

Android零基础入门第73节:Activity创建和配置

Android零基础入门第74节:Activity启动和关闭

Android零基础入门第75节:Activity状态和生命周期

Android零基础入门第76节:Activity数据保存和横竖屏切换

Android零基础入门第77节:Activity任务栈和启动模式

Android零基础入门第78节:四大组件的纽带——Intent

Android零基础入门第79节:Intent 属性详解(上)

Android零基础入门第80节:Intent 属性详解(下)

Android零基础入门第81节:Activity数据传递

Android零基础入门第82节:Activity数据回传

0HiFzWJNRXU

0HiFzQZN6zg

转载于:https://my.oschina.net/u/3598984/blog/1555970

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

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

相关文章

02-c#基础之01-基础语法(一)

1.注释符 1&#xff09;注销 2) 解释 2.C#中的3种注释符 1&#xff09;单行注释// 2)多行注释/*要注释的内容*/ 3)文档注释///多用来解释类或者方法 2.VS中的快捷键 转载于:https://www.cnblogs.com/yoyo-524/p/6502827.html

四五六年级计算机教学计划,五六年级信息技术教学计划

五六年级信息技术教学计划一、大纲对本册教材的要求作为小学阶段的信息技术课程&#xff0c;应以学生对计算机的学习心理、学习行为和学习方法为背景&#xff0c;把计算机基础知识和计算机最新应用融于一体&#xff0c;使之既体现信息技术学科的教学理论&#xff0c;又吸收现代…

阿里巴巴旗下平台口碑推出无人收银技术,改造便利店市场;重庆法院运用 AI 探索“智能判案”...

阿里巴巴旗下平台口碑推出无人收银技术&#xff0c;改造便利店市场 雷锋网消息 阿里巴巴旗下本地生活服务平台口碑今日宣布在上海新兴便利店品牌24鲜上线无人收银技术。消费者只要打开支付宝&#xff0c;扫一扫想要购买的商品的条形码&#xff0c;就可以自助提交订单完成支付。…

如何使用射手影音寻找字幕

我们以"理智与情感"Sense and Sensibility为例&#xff0c;在迅雷搜索了下载&#xff0c;结果到了99%就不动了&#xff0c;由于是字幕文件&#xff0c;不能直接把TD的后缀去掉看影片&#xff0c;但是影片已经下载完成&#xff0c;所以我们使用射手影音播放该电影。&a…

C语言第二次博客作业---分支结构

一、PTA实验作业 题目1&#xff1a;计算分段函数[2] 本题目要求计算下列分段函数f(x)的值&#xff1a; 1.实验代码 double x,result;scanf("%lf",&x);if(x>0){resultsqrt(x);}else{resultpow(x1,2)2*x1/x;}printf("f(%.2f) %.2f",x,result); 2 设计…

OSChina 周四乱弹 ——妹子喜欢的是程序员 这是标准……

2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单&#xff08;2017&#xff09;请戳&#xff08;这里&#xff09; 【今日歌曲】 一叶孤鸿 &#xff1a;分享Nanaka的单曲《いのちの名前&#xff08;Cover 木村弓&#xff09;》 《いのちの名前&#xff08;C…

xp系统sql服务器怎么找,SQL文件在winxp系统下怎么打开

很多用户不知道SQL文件是什么?SQL文件怎么打开?我们存储数据时候经常会遇到SQL文件&#xff0c;如果你不知道WinXP系统SQL文件是什么以及怎么打开的话&#xff0c;那就赶紧看看小编整理的以下文章内容吧!SQL文件是什么?学习编程的同学可能都知道SQL是一种高级的非过程化的编…

Silverlight 设计器加载错误

每次打开silverlight页面出如下错误 然后设计器不能将页面加载出来 最后找了蛮多资料的 感觉这个原因有可能&#xff1a;“控制面板的添加删除程序那里&#xff0c;选中Microsoft Silverlight&#xff0c;看看他的版本&#xff0c;是否与所装的SDK的版本号一致。就算两个版本号…

mysql索引优化实际例子_MySQL索引优化的实际案例分析

Order by desc/asc limit M是我在mysql sql优化中经常遇到的一种场景&#xff0c;其优化原理也非常的简单&#xff0c;就是利用索引的有序性&#xff0c;优化器沿着索引的顺序扫描&#xff0c;在扫描到符合条件的M行数据后&#xff0c;停止扫描&#xff1b;看起来非常的简单&am…

阿里云视频点播解决方案使用教程

2019独角兽企业重金招聘Python工程师标准>>> 课程介绍 视频点播&#xff08;ApsaraVideo for VoD&#xff0c;简称VoD&#xff09;是集视频音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。 产品详情&#xff1a…

云服务器安装操作系统后如何连接,服务器如何安装操作系统

服务器如何安装操作系统 内容精选换一换如果您需要使用毕昇编译器&#xff0c;则需要先在服务端安装毕昇编译器。毕昇编译器基于开源LLVM开发&#xff0c;并进行了优化和改进&#xff0c;同时将flang作为默认的Fortran语言前端编译器&#xff0c;是针对鲲鹏平台的高性能编译器。…

python 0基础起步学习day2

元组&#xff1a;戴上了枷锁的列表 元组是不可改变的&#xff0c;元组是不能随意改变内部的元素的 元组和列表很像&#xff0c;它可以看成是不可修改的列表 所以创建元祖逗号是关键 因为(8,)是元组&#xff0c;这里*就不再是乘号&#xff0c;而是重复拷贝符【重复操作符】 直接…

dp 1.4协议_浅析关于HDMI接口与DP接口

显示器现在主流已经为HDMI接口与DP接口&#xff0c;那么这些接口都有什么区别&#xff0c;以下表格会大致做个区分&#xff0c;建议优先使用DP接口。&#xff08;HDMI2.1接口目前仅发布协议&#xff0c;尚未大规模商用在高清电视机上有部分应用&#xff0c;Mini DP接口版本为DP…

Apache的虚拟主机配置

虚拟主机配置一般可以分为&#xff1a;基于域名基于端口基于IP配置虚拟主机检查防火墙&#xff0c;端口是否打开apache的配置文件。service iptables status #查看防火墙netstat -anp | grep 8021 #端口是必须要考虑的问题locate httpd.confmkdir -p /usr/local/apache/conf/ex…

oracle 的使用

一. docker 模式下进入数据库 ubuntujiang:~$ sudo docker ps -a sudo: unable to resolve host jiang CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …

sql number转varchar_MySQL 指南之 SQL 语句基础

个人所有文章整理在此篇&#xff0c;将陆续更新收录:知无涯&#xff0c;行者之路莫言终(我的编程之路)零、结构化查询语言&#xff1a;SQL(Structured Query Language)DDL 数据定义语言 管理库&#xff0c;表DML 数据操作语言 增删改查 DCL 数据控制语言 数据控制&#xff0c;权…

2018-2019-2 网络对抗技术 20165202 Exp9 Web安全基础

博客目录 一、实践内容 跨站脚本攻击XSS跨站请求伪造CSRFSQL注入攻击二、实验中遇到的问题及解决三、基础问题回答四、实验总结一、实践内容 本实践的目标理解常用网络攻击技术的基本原理。Webgoat实践下相关实验。具体过程&#xff1a; 跨站脚本攻击XSS跨站请求伪造CSRFSQL注入…

xml编辑 html_【c# .net】Xml读写操作(XmlTextReader 类)

Xml读写操作&#xff08;XmlTextReader 类&#xff09;1.XML简介1&#xff09;XML 和 HTML 的设计初衷XML 被设计用来传输和存储数据HTML 被设计用来显示数据2&#xff09;什么是 XML?XML 指可扩展标记语言&#xff08;EXtensible Markup Language&#xff09;XML 是一种标记语…

macaca运行报错之chrome-driver问题处理,关闭 Chrome 的自动更新

自动更新是 Chrome 非常实用的功能之一&#xff0c;但在有些情况下可能还是有关闭自动更新的需求&#xff0c;比如需要用某一个具体的版本来测试一些东西&#xff0c;或者更新之后反而出现了新的 Bug等等。由于一般人没有这样的需求&#xff0c;所以 Google 没有公布关闭自动更…

docker启动sqlserver_Docker搭建SQLServer

一、下载镜像docker pull microsoft/mssql-server-linux二、启动容器docker-composeversion: 3services:sqlserver:image: microsoft/mssql-server-linux:latestrestart: alwaysprivileged: truecontainer_name: sqlserverports:- 1433:1433volumes:- ./data:/var/opt/mssql/da…