2012-07-03 32 views
18

Tôi tải từ hoạt động Một sự SharedPreferences theo cách sau:SharedPreferences từ hoạt động khác nhau

private void SavePreferences(String key, String value){ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putString(key, value); 
    editor.commit(); 
} 

Tại hoạt động B Tôi muốn tải các SharedPreferences. Sau được một NullPointerException:

private void LoadPreferences(){ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    data = sharedPreferences.getString("name", "08:00") ; 
} 

Nếu tôi cố gắng sau, tôi nhận được lỗi biên dịch này: "Không có ví dụ kèm theo của loại A có thể truy cập trong phạm vi"

private void LoadPreferences(){ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(A.this); 
    data = sharedPreferences.getString("name", "08:00") ; 
} 

Làm thế nào tôi có thể truy cập dữ liệu?

Trả lời

32

sử dụng getApplicationContext() thay vì this trong cả hai hoạt động như:

Trong hoạt động Một sự SharedPreferences theo cách sau:

private void SavePreferences(String key, String value){ 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString(key, value); 
     editor.commit(); 
     Intent sd=new Intent(this,Secongtess.class); 
     startActivity(sd); 
     } 

và Hoạt động B có giá trị gia tăng như:

private void LoadPreferences(){ 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    String data = sharedPreferences.getString("name", "08:00") ; 
    Toast.makeText(this,data, Toast.LENGTH_LONG).show(); 
    } 

bởi vì như doc nói:

getDefaultSharedPreferences(Context context):

Gets a SharedPreferences instance that points to the default file that is used by the preference framework in the given context.

+1

Tôi đã thay đổi "this" thành getApplicationContext() và giờ nó hoạt động. Cảm ơn nhiều! – user1390816

+1

không hoạt động ........... –

+0

^Đôi khi bạn có thể cần phải vượt qua đối tượng SharedPreference khi bạn đang gọi một hàm từ Hoạt động A đến B. –

2

Để giá trị lưu trữ trong tùy chọn chia sẻ:

SharedPreferences preferences==PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor=preferences.edit(); 
    editor.putString("Name","Harneet"); 
    editor.commit(); 

Để lấy giá trị từ sở thích chia sẻ:

SharedPreferences preferences==PreferenceManager.getDefaultSharedPreferences(this); 
    String name=preferences.getString("Name",""); 
    if(!name.equalsIgnoreCase("")) 
    { 
    name=name+" Sethi"; /* Edit the value here*/ 
    } 

Để chỉnh sửa dữ liệu từ sharedpreference

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
editor.putString("text", mSaved.getText().toString()); 
editor.putInt("selection-start", mSaved.getSelectionStart()); 
editor.putInt("selection-end", mSaved.getSelectionEnd()); 
editor.commit(); 

Để lấy dữ liệu từ sở thích chia sẻ

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null); 
if (restoredText != null) 
{ 
    //mSaved.setText(restoredText, TextView.BufferType.EDITABLE); 
    int selectionStart = prefs.getInt("selection-start", -1); 
    int selectionEnd = prefs.getInt("selection-end", -1); 
    /*if (selectionStart != -1 && selectionEnd != -1) 
    { 
    mSaved.setSelection(selectionStart, selectionEnd); 
    }*/ 
} 
Các vấn đề liên quan