SharedPreferences的数据究竟存去哪了?

中才德创 2011-04-07 07:27:36
SharedPreferences实现了数据存取。
但用比对工具,发现不是存在项目文件夹,也不是存在.metadata文件夹。

问题:
1)在模拟器里,是存放在什么地方的呢?
2)如果是在实体手机,又是存放在什么地方的呢?

附小demo
package com.demo.android.bmi;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class Bmi extends Activity {
private static final String TAG = "Bmi";
private static final String PREF = "BMI_PREF";
private static final String PREF_HEIGHT = "BMI_Height";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.v(TAG, "onCreate");
setContentView(R.layout.main);
findViews();
restorePrefs();
setListensers();
}

private Button button_calc;
private EditText field_height;
private EditText field_weight;
private void findViews()
{
button_calc = (Button)findViewById(R.id.submit);
field_height = (EditText)findViewById(R.id.height);
field_weight = (EditText)findViewById(R.id.weight);
}
private void setListensers()
{
button_calc.setOnClickListener(calcBMI);
}
private Button.OnClickListener calcBMI = new Button.OnClickListener()
{
public void onClick(View arg0)
{
//switch to report page
Intent intent = new Intent();
intent.setClass(Bmi.this, Report.class);
Bundle bundle = new Bundle();
bundle.putString("KEY_HEIGHT", field_height.getText().toString());
bundle.putString("KEY_WEIGHT", field_weight.getText().toString());
intent.putExtras(bundle);
//Uri uri = Uri.parse(getString(R.string.homepage_uri));
//intent.setData(uri); //ok
//intent.setString("123"); //err
//intent.setInt(124); //err
startActivity(intent);
}
};

private void openOptionsDialog()
{
new AlertDialog.Builder(Bmi.this)
.setTitle(R.string.about_title)
.setMessage(R.string.about_message)
.setPositiveButton(R.string.ok_label, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
}
})
.setNegativeButton(R.string.homepage_label, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
//go to url
Uri uri = Uri.parse(getString(R.string.homepage_uri));
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
})
.show();
}

protected static final int MENU_ABOUT = Menu.FIRST;
protected static final int MENU_Quit = Menu.FIRST + 1;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, MENU_ABOUT, Menu.NONE, "关于...");
menu.add(Menu.NONE, MENU_Quit, Menu.NONE, "结束");
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
super.onOptionsItemSelected(item);
switch (item.getItemId())
{
case MENU_ABOUT:
openOptionsDialog();
break;
case MENU_Quit:
finish();
break;
}
return true;
}

@Override
public void onStart()
{
super.onStart();
Log.v(TAG, "onStart");
}
@Override
public void onResume()
{
super.onResume();
Log.v(TAG, "onResume");
}
@Override
public void onPause()
{
super.onPause();
Log.v(TAG, "onPause");
}
@Override
public void onStop()
{
super.onStop();
Log.v(TAG, "onStop");
//save user preferences. use editor object to make change.
SharedPreferences settings = getSharedPreferences(PREF, 0);
settings.edit()
.putString(PREF_HEIGHT, field_height.getText().toString())
.commit();
}
@Override
public void onRestart()
{
super.onRestart();
Log.v(TAG, "onRestart");
}
@Override
public void onDestroy()
{
super.onDestroy();
Log.v(TAG, "onDestroy");
}

//restore preferences
private void restorePrefs()
{
SharedPreferences settings = getSharedPreferences(PREF, 0);
String pref_height = settings.getString(PREF_HEIGHT, "");
if (!"".equals(pref_height))
{
field_height.setText(pref_height);
field_weight.requestFocus();
}
}
}
...全文
8367 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
eyelid_s 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hmg25 的回复:]
SharedPreferences是以XML的格式以文件的方式自动保存的,在DDMS中的File Explorer中展开到/data/data/<package name>/shared_prefs下,以上面这个为例,可以看到一个叫做SETTING_Infos.xml的文件
[/Quote]

正解,在有root权限的手机上可以用RE浏览器查看xml文件
wangyun528 2011-04-08
  • 打赏
  • 举报
回复
要看很假单 ,adb shell 进去 ,

cat -b 文件 就可以看了
中才德创 2011-04-07
  • 打赏
  • 举报
回复
SharedPreferences settings = getSharedPreferences(PREF, 0);

我们宣告了一个偏好设定(SharedPreferences)型别"settings",并使用"getSharedPreferences"函式,来寻找系统中有无符合以"BMI_PREF"字串(PREF 参数)作为档名的偏好设定档。如果有符合条件的偏好设定档存在的话,就将这个偏好设定指定使用"settings"作为代号来操作。如果没有的 话,"getSharedPreferences"函式会回传 0 给"settings"。


"getSharedPreferences"函式会回传 0 给"settings",这个0是什么意思?指null指针吗?
hmg25 2011-04-07
  • 打赏
  • 举报
回复
adb pull 不知道你会使用吗?如果不会的话,你安装个91手机助手算了~~
中才德创 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 prince58 的回复:]
在模拟器和手机上存放的位置是一样的,只是模拟器上你可以通过pull把文件取出来,手机上没有root权限的话貌似无法取出。
[/Quote]pull是甚么?
prince58 2011-04-07
  • 打赏
  • 举报
回复
在模拟器和手机上存放的位置是一样的,只是模拟器上你可以通过pull把文件取出来,手机上没有root权限的话貌似无法取出。
中才德创 2011-04-07
  • 打赏
  • 举报
回复
可以看到一个叫做BMI_PREF.xml的文件,但为什么打不开看呢?
纠结的木棉花 2011-04-07
  • 打赏
  • 举报
回复
这个在android开发和实践这本书里面有讲到[Quote=引用 1 楼 hmg25 的回复:]
SharedPreferences是以XML的格式以文件的方式自动保存的,在DDMS中的File Explorer中展开到/data/data/<package name>/shared_prefs下,以上面这个为例,可以看到一个叫做SETTING_Infos.xml的文件
[/Quote]
seker_xinjian 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hmg25 的回复:]

SharedPreferences是以XML的格式以文件的方式自动保存的,在DDMS中的File Explorer中展开到/data/data/<package name>/shared_prefs下,以上面这个为例,可以看到一个叫做SETTING_Infos.xml的文件
[/Quote]

楼上正解,点名表扬一下!
hmg25 2011-04-07
  • 打赏
  • 举报
回复
SharedPreferences是以XML的格式以文件的方式自动保存的,在DDMS中的File Explorer中展开到/data/data/<package name>/shared_prefs下,以上面这个为例,可以看到一个叫做SETTING_Infos.xml的文件

80,357

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧