我在写一个单选框选择游戏模式和背景音乐的时候,用getSharedPreferences()函数把数据放到data.xml上了,
可是当要在另外一个activity获取数据的时候就会出现空指针异常,可是我游戏设置模式的时候也是一样的代码,是可行的,到了背景音乐就不行了。请大家帮忙看看。
import five.itcast.cn.music.MyMediaPlayer;
import android.R.string;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;//程序入口Activity
public class SetActivity extends Activity {
private RadioGroup  m_Group1;
private RadioGroup  m_Group2;
private RadioButton m_Radio1;
private RadioButton m_Radio2;
private RadioButton m_Radio3;
private RadioButton m_Radio4;

private Editor player;
private Editor music;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog);
        player = getSharedPreferences("data", 0).edit();   //获取数据库编辑的对象
        music = getSharedPreferences("data", 0).edit();
m_Group1=(RadioGroup) findViewById(R.id.radioGroup1);
m_Group2=(RadioGroup) findViewById(R.id.radioGroup2);
m_Radio1=(RadioButton) findViewById(R.id.radio1);
m_Radio2=(RadioButton) findViewById(R.id.radio2);
m_Radio3=(RadioButton) findViewById(R.id.radio3);
m_Radio4=(RadioButton) findViewById(R.id.radio4);
StartActivity.mediaPlayer=new MyMediaPlayer(this);
m_Group1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkid) {
if(checkid==m_Radio1.getId()){
player.putString("player","computer"); //指定数据的存放
player.commit();
// System.out.println("aaa");
// Log.d("debug","mes" );
}
else{
player.putString("player","man");
player.commit();
}
}
});
m_Group2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkid) 
{
if(checkid==m_Radio3.getId())
{
music.putInt("music",1);    //指定数据的存放
music.commit();
StartActivity.mediaPlayer.setIsPlaying(true);
}
else
{
music.putInt("music",0);    //指定数据的存放
music.commit();
StartActivity.mediaPlayer.setIsPlaying(false);
}
}
});
    }
}package five.itcast.cn.music;
import five.itcast.cn.R;
import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.util.Log;
import android.widget.Toast;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;public class MyMediaPlayer {
private Editor music;
private Activity context; //消息显示文本
private MediaPlayer player;
public MyMediaPlayer(Context c) {
player=MediaPlayer.create(c, R.raw.playermusic);
player.setLooping(true);
}
public void setmusic(int value){
if(value==1)
{
player.start();
}
else
{
player.pause();
}
}
public void setIsPlaying(boolean misplay) {

    SharedPreferences music = getSharedPreferences("data", 0); //定义获取数据对象
       int value=music.getInt("music",0);             //获取数据
       Log.d("debug",Integer.toString(value));
        setmusic(value);
}

private SharedPreferences getSharedPreferences(String string, int i) {
// TODO Auto-generated method stub
return null;
}
public void releasePlayer() {
if (player!=null) {
player.release();
}
}
}
以下是错误信息
java.lang.nullpointeception
five.itcast.cn.music.MyMediaPlayer.setIsPlaying(MyMediaPlayer.java:34)
红色那句是出错误的语句。

解决方案 »

  1.   

    既然两个用的是同一个xml文件,那就用同一个sharedPreferrence对象就行了,两个的话可能存在同步访问的问题
      

  2.   

    你读取SharedPreferences是不是在两个程序里?他们的进程不同?
    那你去data\data目录下看了没有,到底存在吗?
      

  3.   

    今天看了一下,取消了原来的做法,用了一个比较简单的方法,关音乐的时候单步的时候发现执行了pause(),可是会出现error(-38,0)的错误,还是不能关掉,为什么呢