【问题标题】:JAVA - Variable is always nullJAVA - 变量始终为空
【发布时间】:2017-01-27 12:14:18
【问题描述】:

我已经编写了这个代码,变量DEVICE 将在文件存在与否时发生变化。所以我编写了这段代码,但变量DEVICE 始终为空

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

    }

}

【问题讨论】:

  • 那是因为你从不给 is 赋值。
  • 您没有在checktypezip 方法中更新DEVICE,因为string 不是指针。 string = "foo" 不会更新 DEVICE。 PS:这是一个很好的无限循环;)
  • 将返回类型添加到 checktypezip 或从中删除参数并直接访问成员变量。

标签: java android variables null


【解决方案1】:

Java 使用“按值传递”。这意味着DEVICE 被传递给您的函数,而不是引用。尽管您为参数string 分配了一个值,但它永远不会分配给DEVICE

您必须从您的函数中返回disp 的值并将其分配给DEVICE

这样定义你的函数

public String checktypezip()

然后这样称呼它

DEVICE = checktypezip();

checktypezip末尾必须加上return disp

附带说明:

while (DEVICE == null){
    Log.v("Check","Check non completo");
}

这将无限期地阻塞您的主线程并在 5 秒后导致 ANR。我建议用if 替换while

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    相关资源
    最近更新 更多