我记得SharedPreferences 不能跨应用读取数据吧,使用contentprovider它吧。
解决方案 »
- 多个service同时运行其中一个service出现Exception会导致所有的service都停止吗
- Andriod xml文件查错
- 请教如何修改Application的label标签
- 我发现ACTIVITY、SERVICE或者THREAD之间交换数据用单例模式类也挺方便的
- android浏览器优化
- android系统开放C/C++ API了吗?
- 新手咨询如何通过eclipse搭建android平台
- 关于来电拦截读取联系人问题
- progressdialog实现
- Monkey测试时,怎么设置手机不下拉状态栏?
- android logcat 输出文件后 不能显示所有的Log 信息
- android GLSurfaceView半透明出错
只有用System.exit(0);才能完全退出缓存。
我这里实验可以
public static int MODE = Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE;
我再想是不是你模拟器有问题啊你可以试试把工程1.2sharepreferenceg中的SharePreferenceActivity类中oncreate()方法中的代码:
Context c = null;
labelView = (TextView)findViewById(R.id.label);
try {
c = this.createPackageContext(PREFERENCE_PACKAGE, Context.CONTEXT_IGNORE_SECURITY); } catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SharedPreferences sharedPreferences = c.getSharedPreferences(PREFERENCE_NAME, MODE);
String name = sharedPreferences.getString("Name","Tom");
int age = sharedPreferences.getInt("Age", 20);
float height = sharedPreferences.getFloat("Height",1.81f);
String msg = "";
msg += "姓名:" + name + "\n";
msg += "年龄:" + String.valueOf(age) + "\n";
msg += "身高:" + String.valueOf(height) + "\n";
labelView.setText(msg);
Toast.makeText(this, name, Toast.LENGTH_SHORT).show();放到onResume()方法中因为你有时候点击back再次进入程度时oncearte()方法可能没有调用,因为你的程序只是切换到了后台
-----------------------------------------------------
lz 可以看看你的Oncreate方法有没有再次执行啊
谢谢!看来应该就是这个问题了。
-----------------------
看了,Oncreate方法再次执行了。
应该是模拟器的问题。
大家可能没有留意 getPreferences()这个方法调用的时候需要上下文环境,也就是调用的时候隐式的省略了this
this.getPreferences(); 而在应用中这个this 可以理解为包名环境。
所以如何使外部应用分享该应用的数据打架可以晓得了。
以下贴出代码
public class SharedataActivity extends Activity {
SharedPreferences mSharedPreferences;
Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {//org.example.test数据存放的包名
mContext = createPackageContext("org.example.test", Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
Toast.makeText(getApplicationContext(), "shibai", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
mSharedPreferences = mContext.getSharedPreferences("shenwenjian", MODE_WORLD_READABLE);//shenwenjian 为 sharepreferences的名字
Toast.makeText(this, mSharedPreferences.getString("name", "null"), Toast.LENGTH_SHORT).show();
}
}注意你创建这个SharedPreferences 时候的权限
// TODO Auto-generated catch block
e.printStackTrace();
}SharedPreferences sharedPreferences = c.getSharedPreferences(PREFERENCE_NAME, MODE);
String name = sharedPreferences.getString("Name","Tom");
int age = sharedPreferences.getInt("Age", 20);
float height = sharedPreferences.getFloat("Height",1.81f);写在一个函数里面,因为同楼上说的,要获取同一个类。因为重写onclick这些函数里面往往是不同类。所以获取不到。我遇到的就这种情况
此我的做法是在A和B应用中设置mode为:
MODE_WORLD_READABLE|MODE_MULTI_PROCESS。若只有B设置为 MODE_WORLD_READABLE|MODE_MULTI_PROCESS,
而A设置为MODE_WORLD_READABLE也是不行的。
(PS:其实这里我也有点不解,为什么A应用也要设置MODE_MULTI_PROCESS)关于MODE_MULTI_PROCESS:
在Android 2.3及以前,MODE_MULTI_PROCESS这个标志位都是默认开启的,允许多个进程访问同一个SharedPrecferences对象。而以后的Android版本,必须通过明确的将MODE_MULTI_PROCESS这个值传递给mode参数,才能开启多进程访问。
B程序里设置了 Context.MODE_WORLD_READABLE|Context.MODE_MULTI_PROCESS
好使了