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();
     }
    }
}

解决方案 »

  1.   

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

  2.   

    这个在android开发和实践这本书里面有讲到
      

  3.   

    可以看到一个叫做BMI_PREF.xml的文件,但为什么打不开看呢?
      

  4.   

    在模拟器和手机上存放的位置是一样的,只是模拟器上你可以通过pull把文件取出来,手机上没有root权限的话貌似无法取出。
      

  5.   

    adb pull 不知道你会使用吗?如果不会的话,你安装个91手机助手算了~~
      

  6.   

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

  7.   

    要看很假单 ,adb shell 进去 ,cat -b 文件 就可以看了
      

  8.   


    正解,在有root权限的手机上可以用RE浏览器查看xml文件