SharedPreferences是Android提供的很方便的一种保存小数据的方式。
它能够保存一些基本类型的数据,包括int,boolean,等等,当然也包括String,这个对象类型。
我们通常可以用这个类来保存用户的基本信息,比如软件中常用的用户名密码,标记用户是否第一次打开软件等等。
下面是一个很简单的例子:实现保存用户输入的内容
/** * 通过SharedPreferences来保存用户的私有数据 * * */ public class MainActivity extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; public static final String PREFS_KEY_INPUT_CONTENT = "key_input_content"; private EditText etInput; private Button btnCommit; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etInput = (EditText)findViewById(R.id.et_input); btnCommit = (Button)findViewById(R.id.btn_commit); etInput.setText(getData());//获取数据 btnCommit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { saveData();//保存数据 } }); } @Override protected void onStop(){ super.onStop(); saveData();//保存数据 } /** * 读取保存的数据 * * */ private String getData() { // 获取SharedPreferences文件 SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);//表示这个是私有的 String inputContent = settings.getString(PREFS_KEY_INPUT_CONTENT, ""); return inputContent; } /** * 保存数据 * * */ private void saveData() { SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putString(PREFS_KEY_INPUT_CONTENT, etInput.getText().toString()); editor.commit(); } }
效果:
Dialog的dismiss和cancel
AlertDialog使用很方便,但是有一个问题就是:dismiss方法和cancel方法到底有什么不同?
今天有时间,看了看源码(其实源码并不是全都那么深奥的!~~)。
AlertDialog继承与Dialog,现在各位看看结构图:
[attachment=1826]
然后在Dialog类中找到了dismiss和cancel方法的实现。重要看dismiss的源码:
Java代码
public void cancel() {
if (mCancelMessage != null) {
// Obtain a new message so this dialog can be re-used
Message.obtain(mCancelMessage).sendToTarget();
}
dismiss();
}
看明白了吧! 在cancel方法中调用了dismiss方法。 但是现在还有一个问题就是:mCancelMessage是什么?
private Message mCancelMessage; // 这是源码中的声明
然后再来看源码:
Java代码
public void setOnCancelListener(final OnCancelListener listener) {
if (listener != null) {
mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener);
} else {
mCancelMessage = null;
}
}
public void setCancelMessage(final Message msg) {
mCancelMessage = msg;
}
现在问题清楚了,就是如果你在创建AlertDialog的时候调用了setOnCancelListener 这个mCancelMessage变量有作用,否则dismiss和cancel等同。
另外在看源代码的时候发现,Dialog还有一个方法叫做setCanceledOnTouchOutside,貌似挺有用的。
原文:Coca-Cola 'targeted' by China in hack ahead of acquisition attempt
作者:BBC
发表:2012-11-5
本文由Fish翻译。
彭博社报道,中国黑客曾经侵入可口可乐内部机密系统超过1个月。
在2009年,一个恶意链接通过电子邮件发送给可口可乐高级行政人员,随后该公司就被黑客入侵了。黑客秘密记录敏感商业信息,长达1个月未被发现。
美国证券交易委员会(SEC)表示,可口可乐公司并没有公开披露被黑客攻击的事情。
去年,美国证券交易委员会概述了企业受到网络攻击的准则。内容为:在这种问题上必须给出高透明度,尽力维护投资者和利益相关者的利益。
然而,可口可乐公司,一直不愿意这样做,因为担心声誉受损而影响股票价格。
Jacob Olcott(网络政策顾问)说:“投资者根本就不知道发生了什么!可口可乐公司目前所提供的材料很少有关他们在网络上的发生的事情。”
交易失败
在这次事件中,黑客伪装成可口可乐公司的首席执行官,发送电子邮件给Paul Etchells(可口可乐公司亚太地区副总裁)。
电子邮件中的一个恶意连接被点击,黑客在Paul Etchells的电脑上安装了鼠标键盘记录器等其他恶意软件。
在接下来的日子里,黑客偷取了密码,给自己在网路上增加管理员权限。
彭博社的内部文件看到,这次攻击是获得国家力量支持的。
黑客事件,正好发生在可口可乐打算收购中国汇源果汁集团之时,预计收购价为24亿美元。如果成功收购,这将会是外资收购中国公司历史上交易额最大的一次。
Bloomberg表示(由内部人士透露),但是,可口可乐内部网络被攻击后第3天,此项收购交易被取消了。
可口可乐公司在一份声明中告诉BBC:“我们公司的安全团队,和世界各地的执法机构合作,以保障网络安全”。
“依惯例,我们对安全事件不做评论”。