1

getDefaultSharedPreferences(con)在我的应用程序中使用来存储首选项。现在我想在另一个应用程序中访问这个共享首选项。我使用了以下方法:

con = this.createPackageContext("com.example.preferences", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences filePref = PreferenceManager.getDefaultSharedPreferences(con);
            if(filePref != null){
                Toast.makeText(getApplicationContext(), "file pref not null --- ", Toast.LENGTH_LONG).show();   
            }else{
                Toast.makeText(getApplicationContext(), "file pref is null **** ", Toast.LENGTH_LONG).show();
            }
            Map<String,?> allkeys = filePref.getAll();
            Toast.makeText(getApplicationContext(), "file pref size **** "+allkeys.size(), Toast.LENGTH_LONG).show();
            for(Map.Entry<String,?> entry : allkeys.entrySet()){
                Toast.makeText(getApplicationContext(), "~~~ file pref --- map values --- "+entry.getKey() + ": "+entry.getValue().toString(), Toast.LENGTH_LONG).show();
            }

另一种尝试的方法是指定文件名并访问它,如下所示;

SharedPreferences filePref = gvcon.getSharedPreferences("com.example.preferences_preferences", Context.MODE_PRIVATE);

使用这种方法,我可以访问SharedPrefernce文件,它返回文件不为空,但是当我检查文件大小时,它显示为 0。我无法从文件中读取首选项值。我使用shareduserid了另一个应用程序,以便完全访问该应用程序。解决这个问题的正确方法是什么?

4

1 回答 1

0

我不确定我是否完全理解您的问题,但有时此实现将帮助您跨包访问数据。用于getSharedPreferences()将数据存储在共享首选项中

此方法会将数据存储在共享首选项中

public void dataWriter(){
    String strShareValue = "Hello! this is shared data";
    SharedPreferences prefs = getSharedPreferences("demopref",Context.MODE_WORLD_READABLE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("demostring", strShareValue);
    editor.commit();
}

您可以使用此代码示例从另一个包访问该共享数据

public void dataRead(){
 Context con;
     try {
         con = createPackageContext("PACKAGE NAME THAT SHARES DATA", 0);
         SharedPreferences pref = con.getSharedPreferences("demopref", Context.MODE_PRIVATE);
         String dataShared = pref.getString("demostring", "No Value");
      }
     catch (NameNotFoundException e) {
         Log.e("Not data shared", e.toString());
      }
    }
}
于 2013-06-26T15:43:37.267 回答