Đôi
khi có các ứng dụng ta cần biết người dùng mở lên lần đầu tiên, ta sẽ có thông
báo nào đó.
Ta
muốn hiện chỉ một lần để người dùng biết là được rồi, không phải cứ mở lên là
hiện sẽ gây bất tiện cho người dùng.
Ta
sẽ dùng kiến thức đã học về đọc ghi dữ liệu để làm việc này.
Ý
tưởng như sau:
Khi
ứng dụng mở lên, ta sẽ đọc một file có tên kiemtra.text, nếu file đọc ra có độ
dài chuỗi bằng 0, ta kết luận rằng đây là lần mở đầu tiên. Ta hiện thông báo
nào đó.
Sau
đó khi vào ứng dụng thoát, ta ghi lại một file kiemtra.txt. Lần sau mở lên ắt
là đọc ra sẽ có ký tự ở đó. Có ký tự thì ta không thông báo nữa vì người dùng lần đầu đã biết rồi.
Trước
tiên ta khai báo một biến toàn cục có tên dodai. Copy dòng sau lên trên chữ
Override
int dodai=0;
Ta
đọc file kiemtra.txt ra chuỗi, nếu độ dài chuỗi =0, ta hiện thông báo rằng đây
là lần mở đầu tiên. Copy đoạn sau xuống dưới đoạn findViewById.
try {
String FILE_NAME = "kiemtra.txt";
FileInputStream fIS =
openFileInput(FILE_NAME);
byte[] arrayData = new byte[fIS.available()];
if((fIS.read(arrayData))!=
-1){
String
fileContent = new String(arrayData);
docra=fileContent;
}
fIS.close();
} catch (Exception e) {
//Log.e("Error",
e.toString());
}
dodai=docra.length();
//nếu 0 tức chưa có file
kiemtra.
if(dodai==0){
Toast.makeText(MainActivity.this, "Đây là lần
mở đầu tiên",
Toast.LENGTH_SHORT).show();
}
Thực
tế trong lệnh if làm gì là tùy bạn.
Tiếp
theo đã biết là chưa có file kiemtra thì khi thoát ta ghi file đó ra để lần sau
khi mở app đọc thì đã có nó rồi, ta không thông báo nữa.
Copy
đoạn sau xuống trên ngoặc đóng cuối cùng.
@Override
public void onBackPressed()
{
if(dodai==0){
String
vao="Đây
là dòng ghi vào";
try {
FileOutputStream fos =
openFileOutput("kiemtra.txt", Context.MODE_APPEND);
OutputStreamWriter osw = new
OutputStreamWriter(fos);
osw.append(vao);
osw.flush();
osw.close();
} catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
finish();
}
Lệnh
này để khi người dùng ấn phím Back trên điện thoại, nếu độ dài file đọc ra bằng
0 tức chưa có nó thì ta ghi nó ra, dùng một dòng chữ bất kỳ.
Như
vậy khi mở lần 2 ắt là đọc ra sẽ có ký tự và ta biết đó không phải lần đầu.
Nếu
ứng dụng có nút Quit, bạn cho lệnh này từ chỗ if vào trong nút Quit là được.
Chạy
thử để thấy ứng dụng chỉ thông báo Toast có một lần đầu.
Trong
bài xóa dòng ListView mở lại không hiện dòng xóa, ta cũng đọc file danhsach để
kiểm tra xem có chưa, chưa có mới ghi từ mảng.
Dùng
cách đọc file kiểm tra như trên cũng có thể làm tương tự, đã biết là mở lần sau,
ta không ghi file danhsach từ mảng nữa.
No comments:
Post a Comment