java - 如何在多个方法之间共享一个变量?

标签 java android

保存实例后,我需要将“int audio”共享给 check() 方法以执行多项操作。我有一个“信息”选项:当我点击时,我看到信息对话框并且我想听音频(当我点击“取消”时停止它)。但是当我旋转模拟器时,我有另一个音频明星。

int audio;
static int Info;

@Override
public void onCreate(Bundle savedInstanceState){ 
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
int Info = savedInstanceState.getInt("dialoginfo");
int audio = savedInstanceState.getInt("audio");
}

if(Info != 0)
  {
      Info();
}

private void Info(){
    Info = 1;
    sobCheck();
    LayoutInflater li = LayoutInflater.from(this);
    View view = li.inflate(R.layout.info, null);
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(view).create();
    TextView text=(TextView) findViewById(R.id.infoView1);
    builder.setCancelable(false); 
    builder.setPositiveButton("Chiudi", new DialogInterface.OnClickListener() {  
           public void onClick(DialogInterface dialog, int id) {  
               Info = 0;
               mp.stop();
               mp.reset();
               mp.release();
                mp = null;
                audio = 0;                  
               dialog.cancel();
        }  
        });  
    builder.show();
        }


private void sobCheck(){
if (audio == 0){
mp = MediaPlayer.create(this, R.raw.sob);
mp.start();
audio = 1;
}



protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("audio", a);

旋转屏幕后,“音频”始终为“0”

最佳答案

问题是您已经创建了局部范围的变量,这些变量在此处隐藏了您的应用程序级变量:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        int Info = savedInstanceState.getInt("dialoginfo");
        int audio = savedInstanceState.getInt("audio");
    }

    if (Info != 0) {
        Info();
    }
}

这声明并初始化了两个变量Infoaudio,它们的范围限定为您的if 检查并在之后立即丢弃。它们实际上不会更改您在 onCreate 方法之外声明的应用程序级变量。尝试将其更改为:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        Info = savedInstanceState.getInt("dialoginfo");
        audio = savedInstanceState.getInt("audio");
    }

    if (Info != 0) {
        Info();
    }
}

这可以防止 Infoaudio 在您的本地范围内被重新声明,而应该导致您已经声明的变量被初始化。

关于java - 如何在多个方法之间共享一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13769155/

相关文章:

java - 无法单击图像选择器 SELENIUM JAVA

android - 如何从 SD 卡上传图像到 Facebook?

android - 在一个风格/目标中使用多个 google-services.json 和 GoogleService-Info.plist 文件

android - 更平滑的 Android 边框半径?

java - 使用 flatMap 连接 Observables (RxJava )

java - Android : java. lang.NoClassDefFoundError

java - 无法使 EclipseLink 使用方法而不是字段

java - Tomcat 故意忽略启动错误

java - YUI 压缩器与 Granule

java - 菜单打开时覆盖后退按钮