2011-08-05 6 views
14

Tôi đang tìm một Tùy chọn chia sẻ trên Android và tôi tự hỏi có cách nào chỉ kiểm tra xem tệp tùy chọn có tồn tại hay không.Cách kiểm tra xem tệp SharedPreferences có tồn tại hay không

SharedPreferences mySharedPreferences ; 
mySharedPreferences=getSharedPreferences(“Name_of_your_preference”,mode); 

Mã trên đây khiến tôi tin rằng "Name_of_Your_preferene" được lưu trữ dưới dạng tệp hoặc một số loại vùng chứa chứa tùy chọn của bạn.

Tôi tự hỏi là có cách nào để kiểm tra xem điều này có tồn tại hay không. Khi người dùng tải lên một hoạt động, tôi muốn lưu tất cả các cài đặt vào tệp này bằng một số giá trị mặc định (tắt cho tất cả các cài đặt). Tuy nhiên tôi chỉ muốn làm điều này nếu họ đang đi đến trang lần đầu tiên.

Nếu không nếu tôi sẽ làm một cái gì đó như thế này mỗi khi tải trang lên

SharedPreferences.Editor editor= mySharedPreferences.edit(); 

/* now store your primitive type values. In this case it is true, 1f and Hello! World */ 

editor.putBolean(“myBoolean”,true); 

editor.putFloat(“myFloat”,1f); 

editor.putString(“myString”,” Hello! World”); 

Tôi đoán nó sẽ ghi đè lên tất cả các thiết lập ngay cả những họ thiết lập.

Trả lời

19

SharedPreferences được lưu trong tệp xml. Bạn có thể tìm thấy nó trong /data/data/your_application_package/shared_prefs/Name_of_your_preference.xml

Để kiểm tra xem SharedPreferences 'Name_of_your_preference' tồn tại:

File f = new File(
"/data/data/your_application_package/shared_prefs/Name_of_your_preference.xml"); 
if (f.exists()) 
    Log.d("TAG", "SharedPreferences Name_of_your_preference : exist"); 
else 
    Log.d("TAG", "Setup default preferences"); 

trọng.

+0

Vì vậy, tôi chỉ duyệt qua thông qua trình mô phỏng? – chobo2

+0

Có, với adb hoặc ứng dụng trình duyệt hoặc mã, như bạn muốn! – FinalSpirit

+0

@ FinalSpirit- adb? – chobo2

18

Bạn có thể sử dụng phương pháp contains trên đối tượng SharedPreferences để kiểm tra xem một trong các khóa tùy chọn của bạn có tồn tại trong tệp hay không. Nếu điều này trả về false, bạn có thể giả định đây là lần đầu tiên và điền các cài đặt mặc định. Tài liệu cho phương pháp này là here.

Tôi không thể tìm thấy bất kỳ cách nào để kiểm tra xem tệp tùy chọn đã tồn tại chưa (nó sẽ tự động được tạo lần đầu tiên bạn truy xuất trình chỉnh sửa), nhưng phương pháp này sẽ thực hiện thủ thuật.

+3

thế nào về nếu tôi sử dụng GetAll() vì nó sẽ chỉ nhận được ưu đãi về hình thành "Name_of_your_preference" phải không? Vì vậy, nếu số lượng sẽ bằng không, tôi đoán nó sẽ không được tạo ra? – chobo2

+0

Cũng nên hoạt động. Đó là một vấn đề ưu tiên, tôi cho rằng, nhưng trong trường hợp 'getAll()' 'bạn sẽ phải khởi tạo một đối tượng' 'Map'' chỉ để kiểm tra kích thước của nó. Phương pháp ban đầu chỉ có vẻ như một thử nghiệm boolean nhanh hơn. –

+0

Tôi đang sử dụng monodroid. Nó có chức năng đếm nên tôi nghĩ tôi ổn. – chobo2

1

Tôi đã làm theo cách này để có thể điều chỉnh được.

File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + getPackageName()+ "_preferences.xml"); 

if(f.exists()) 
{ 
    //do stuff`enter code here` 
} 

tôi đã sử dụng này trong quá trình xác nhận tại onCreate nếu các ưu đãi tồn tại hay không và tùy thuộc vào câu trả lời cho phép một nút để xóa các ưu đãi hay không - chỉ cần xác minh những gì tên của tập tin sở thích của bạn là ở DDMS nếu nó không được đặt tên theo cách thủ công.

+0

Hi natur3, Không đọc đường dẫn tệp: Tệp f = new File ("/ data/data /" + getPackageName() + "/shared_prefs/_preferences.xml"); mà không có getPackageName thứ hai()? Khi tôi sử dụng mã của bạn điều này đã đi đến một thư mục không tồn tại và do đó sẽ không lưu. –

4

Tôi không có đủ đại diện để nhận xét bài đăng của natur3. Do đó câu trả lời này.

@ natur3: Rất hữu ích, thankyou. Tôi có một vấn đề nhỏ tuy nhiên ... với hậu tố tập tin. Nếu tôi xác định tên tập tin của tôi như thế này:

private static final String FILENAME = "myPrefs"; 

Và sau đó sử dụng:

File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + FILENAME); 

f.exists() sẽ trả về false ngay cả khi tập tin tồn tại trên hệ thống tập tin. Điều này là do Android sẽ tự động thêm hậu tố ".xml" khi viết SharedPreferences vì ​​vậy tôi phải tạo tài liệu tham khảo tệp của tôi như sau:

File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + FILENAME + ".xml"); 

để nó hoạt động. Tôi không biết bạn có hậu tố "_preferences.xml" từ đâu.

Tôi đã cố gắng tìm ra điều này bằng cách duyệt qua hệ thống tệp trình giả lập trong Eclipse bằng Window-> Show View-> Other ... và sau đó chọn "File Explorer".

2

Thay vì cứng mã hóa "/ data/data /" đường dẫn mà bạn có thể làm điều này:

public boolean preferenceFileExist(String fileName) { 
    File f = new File(getApplicationContext().getApplicationInfo().dataDir + "/shared_prefs/" 
      + fileName + ".xml"); 
    return f.exists() 
} 
0

Cách dễ dàng nhất tôi tìm thấy, chúng ta có thể kiểm tra xem sở thích chung tồn tại bằng cách tích hợp sẵn trong mã trên android

sharePrefName.contains(String key) // as if (userData.contains("name")){Toast // Your data is already here!} 

Kiểm tra xem tùy chọn có chứa tùy chọn hay không. (Đó là trừu tượng phương pháp public boolean)

đơn giản và dễ dàng :)