我是Android新手。我正在尝试访问另一个应用程序中的一个应用程序的 SharedPreferences 。 但我没有得到这些价值观。
我的代码发布在下面。
SharedPref1中的Create.java
package com.example.sharedpref1;
public class Create extends Activity implements OnClickListener{
EditText et1,et2;
Button btn;
String LogID,Pwd;
public SharedPreferences loginDetails;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.create);
et1 = (EditText)findViewById(R.id.etC1);
et2 = (EditText)findViewById(R.id.etC2);
btn = (Button)findViewById(R.id.bCreate);
loginDetails = getSharedPreferences("logid", MODE_WORLD_READABLE);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.bCreate)
{
LogID = et1.getText().toString();
Pwd = et2.getText().toString();
Toast.makeText(getApplicationContext(), "User Profile Createad With\nUser ID: "+LogID +"\nPassword: "+Pwd, Toast.LENGTH_LONG).show();
SharedPreferences.Editor store = loginDetails.edit();
store.putString("logid", LogID);
store.putString("pass", Pwd);
store.commit();
finish();
}
}
}
SharedPref2中的Show.java
package com.example.sharedpref2;
public class Show extends Activity implements OnClickListener{
EditText log,pwd;
Button back;
public SharedPreferences loginDetails;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.show);
log = (EditText)findViewById(R.id.etid);
pwd = (EditText)findViewById(R.id.etPwd);
back = (Button)findViewById(R.id.bBack);
back.setOnClickListener(this);
loginDetails = getSharedPreferences("logid", MODE_WORLD_READABLE);
log.setText(loginDetails.getString("logid", "defValue"));
pwd.setText(loginDetails.getString("pass", "defValue"));
}
}
我的价值如下
答案 0 :(得分:1)
我正在尝试访问另一个应用程序中的一个应用程序的SharedPreferences。
这是一个坏主意。引用the documentation for MODE_MULTI_PROCESS
:
SharedPreference loading flag:设置后,即使已在此进程中加载了共享首选项实例,也会检查磁盘上的文件是否已修改。在应用程序具有多个进程的情况下,有时需要此行为,所有进程都写入相同的SharedPreferences文件。 一般来说,流程之间通常有更好的沟通方式。
(强调补充)
此外,这可行的唯一方法是,如果您制作SharedPreferences
MODE_WORLD_READABLE
,这意味着任何应用都可以获得这些偏好。有才能的程序员不会这样做,但会使用其他IPC机制,这些机制只能在用户权限的情况下限制两个应用程序和之间的通信,以免将用户数据泄露给其他人。
最后,您没有任何可以跨进程工作的代码。 getSharedPreferences()
会获得自己的流程的偏好设置。我可以考虑从另一个进程获取SharedPreferences
的唯一方法是在getSharedPreferences()
上通过Context
调用createPackageContext()
,而我没有尝试过这个,因为我不会梦想实现你提出的建议。
答案 1 :(得分:0)
如果您需要在应用程序之间共享内容,我建议您使用内容提供商,而不是SharedPrefrences。根据我的经验,在这些情况下,SharedPrefernces是不可靠的。
MODE_WORLD_READABLE在API级别17中被删除。 http://developer.android.com/reference/android/content/Context.html#MODE_WORLD_READABLE