保存 数据 出现 异常 :
是因为 , 这里的 路径 以及 保存的方式 都 有问题 , 目前是运行 在androd中, android底层 是linux内核, linux 文件系统
是根目录是 一个 /
写 File file = new File(“info.txt”); ---将数据 保存 到 linux 根目录/ 下, 而这时 当前的应用程序 不可能取得这样的权限的.
每个应用程序 可以 将数据 保存到 自己 独有的一个 文件 夹 下
public class MainActivity extends AppCompatActivity {
private Button loginBtn;
private EditText userNameET;
private EditText passwordET;
private CheckBox rememberCB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
loginBtn=findViewById(R.id.loginBtn);
userNameET=findViewById(R.id.userNameET);
passwordET=findViewById(R.id.passwordET);
rememberCB=findViewById(R.id.rememberCB);
File file = new File("/data/data/com.lfz.qqlogin/info.txt");
if(file.exists()&&file.length()>0){
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String s = reader.readLine();
String[] split = s.split("#");
userNameET.setText(split[0]);
passwordET.setText(split[1]);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
loginBtn.setOnClickListener(new MyOnClickListener());
}
//登录的方法
public void login(){
String userName = userNameET.getText().toString().trim();
String password = passwordET.getText().toString().trim();
//判断是否已经输入了用户名和密码
if(TextUtils.isEmpty(userName)||TextUtils.isEmpty(password)){
Toast.makeText(this,"请输入qq号码和密码",Toast.LENGTH_SHORT).show();
return;
}
//判断是否已经勾选了checkbox,如果已经勾选了则保存userName和password
boolean checked = rememberCB.isChecked();
if(checked){
//保存数据
OutputStream os = null;
try {
File file = new File("/data/data/com.lfz.qqlogin/info.txt");
os = new FileOutputStream(file);
String value=userName+"#"+password;
os.write(value.getBytes());
System.out.println("hello");
Toast.makeText(this,"勾选了,保存成功!",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}else{
Toast.makeText(this,"未勾选",Toast.LENGTH_SHORT).show();
}
}
private class MyOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
int id = v.getId();
if(id==R.id.loginBtn){
login();
}
}
}
}
请 设计 一下 android中 图片的缓存策略, 保存到 设备 中 :
每个应用都有自己的 保存数据的文件夹, 有 cache 和 files文建这里 可以去保存 应用运行 时 需要一些数据 .
举例 , 一个新闻客户端, 如果 现在网络不可以用, 那么 就默认的情况下给用户显示缓存 cache 文件夹下的数据 。
如果网络可以用,那么就 提示 用户 当前 互联网上服务器的最新的数据 有 多少条,
然后 让用户去选择是否 更新 数据,如果不选择更新, 那么就 不更新,
如果选择更新, 那么就将 缓存cache 文件夹的数据给覆盖掉, 这样就可以 设计一套比较合理的缓存策略.