JAVA - 变量始终为null

1 java variables null android

我已经制作了这个代码,DEVICE如果文件存在与否,变量将会改变.所以我已经制作了这段代码,但变量DEVICE始终为null

public class MainActivity extends AppCompatActivity{

    String DEVICE;

 @Override
    protected void onCreate(Bundle savedInstanceState) {

        apply = (Button) findViewById(R.id.apply);
        apply.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    checktypezip(DEVICE);
                    while (DEVICE == null){
                        Log.v("Check","Check non completo");
                    }
            }
        });

    }

    public void checktypezip(String string){
        String percorso = Environment.getExternalStorageDirectory().getPath()+"/BAC/.unzipfile/";

        File normalzip = new File (percorso+"desc.txt");
        File flashzip = new File (percorso+"/system/media/bootanimation.zip");
        File samsung = new File (percorso+"/bootsamsung.qmg");
        File flashsamsung = new File (percorso+"/system/media/bootsamsung.qmg");
        String disp;

        disp=string;
        if (normalzip.exists()){
            disp = "Normal";
            string=disp;
        }
        else if (flashzip.exists()){
            disp = "Flashnormal";
            string=disp;
        }
        else if (samsung.exists()){
            disp = "Samsung";
            string=disp;
        }
        else if (flashsamsung.exists()){
            disp = "Samsungflash";
            string=disp;
        }
        else
        {
            disp = "Unknown";
            string=disp;
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

0xD*_*0DE 5

Java使用'按值传递'.这意味着,DEVICE传递给你的函数,而不是参考.虽然您要为参数指定值string,但永远不会将其赋值给DEVICE.

您必须disp从函数返回值并将其赋值给DEVICE

像这样定义你的功能

public String checktypezip()
Run Code Online (Sandbox Code Playgroud)

并称之为这样

DEVICE = checktypezip();
Run Code Online (Sandbox Code Playgroud)

最后checktypezip,你必须添加return disp

在旁注:

while (DEVICE == null){
    Log.v("Check","Check non completo");
}
Run Code Online (Sandbox Code Playgroud)

这将无限期地阻塞主线程并在5秒后导致ANR.我会建议更换whileif