安卓成长记(就)
为啥这么不想看下去呢……
最近看了一下书单,真的有好多东西需要学啊。
python是个好东西,真希望自己马上学会。
今天讲讲sp,sharedPreferences
方法也没几个,全拷贝过来了:
boolean contains(String key)
Checks whether the preferences contains a preference.
根据key的值,看这个sp文件里面有没有某个key。在sp中是按照key-value键值对存放的
SharedPreferences.Editor edit()
Create a new Editor for these preferences, through which you can make modifications to the data in the preferences and atomically commit those changes back to the SharedPreferences object.
这个函数是因为,sharedPreferences本身不提供写入数据的能力,需要调动这个edit()函数去返回一个editor对象,利用这个对象去操作数据库。
Map
public class MainActivity extends Activity
{
//很标准的步骤啊,
//这个首先获取SharedPreferences对象
//之后本例要写入sp,所以获取了editor对象
SharedPreferences preferences;
SharedPreferences.Editor editor;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取只能被本应用程序读、写的SharedPreferences对象
//这个,如果没有的话会不会自动创建呢?
//不会自动创建的,但是也不会有异常,只是返回默认值。
preferences = getSharedPreferences("crazyit", MODE_PRIVATE);
//为了能写入,自动获取editoir对象
editor = preferences.edit();
Button read = (Button) findViewById(R.id.read);
Button write = (Button) findViewById(R.id.write);
read.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
// 读取字符串数据
String time = preferences.getString("time", null);
// 读取int类型的数据
int randNum = preferences.getInt("random", 0);
String result = time == null ? "您暂时还未写入数据" : "写入时间为:"
+ time + "\n上次生成的随机数为:" + randNum;
// 使用Toast提示信息
Toast.makeText(MainActivity.this, result
, Toast.LENGTH_SHORT).show();
}
});
write.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "
+ "hh:mm:ss");
//存入当前时间这个格式要注意。
editor.putString("time", sdf.format(new Date()));
// 存入一个随机数
editor.putInt("random", (int) (Math.random() * 100));
// 提交所有存入的数据
editor.commit();
}
});
}
}
注意sp也是以xml形式保存的。根元素是map,其中是kay-value键值对
文件的读写
在开始代码之前先看两个函数:
getDir(String name,int mode)这个是获取应用程序的……
getFilesDir():这个函数是获取应用程序数据文件夹下的绝对路径
有了这两个函数不用自己手敲路径了
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println(new StringBuilder("a").append("b").append("c")
.toString());
// 获取两个按钮
Button read = (Button) findViewById(R.id.read);
Button write = (Button) findViewById(R.id.write);
// 获取两个文本框
final EditText edit1 = (EditText) findViewById(R.id.edit1);
final EditText edit2 = (EditText) findViewById(R.id.edit2);
// 为write按钮绑定事件监听器
write.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
// 将edit1中的内容写入文件中
write(edit1.getText().toString());
edit1.setText("");
}
});
read.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 读取指定文件中的内容,并显示出来
edit2.setText(read());
}
});
}
private String read()
{
try
{
// 打开文件输入流
//这里是读文件,不论是读写,都要首先打开文件流
//这里是弄了一个fin流。FileInputStream
FileInputStream fis = openFileInput(FILE_NAME);
//这里是读的缓冲区,1024个字节的缓冲区
byte[] buff = new byte[1024];
int hasRead = 0;
StringBuilder sb = new StringBuilder("");
// 读取文件内容
//如果fis的read方法读到了东西,那就将东西给hasRead。
while ((hasRead = fis.read(buff)) > 0)
{
sb.append(new String(buff, 0, hasRead));
}
// 关闭文件输入流
fis.close();
return sb.toString();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
private void write(String content)
{
try
{
// 以追加模式打开文件输出流
//这里是打开输出流:
//弄了一个FileOutputStream,fos
FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);
// 将FileOutputStream包装成PrintStream
//但是下面这一步不怎么明白是干啥,又弄了个PrintStream流。
PrintStream ps = new PrintStream(fos);
// 输出文件内容
ps.println(content);
// 关闭文件输出流
ps.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}