2017-01-27 95 views
1

我已將此代碼寫入變量DEVICE將在文件存在或不存在時更改。所以我做了這段代碼,但變量DEVICE始終爲空JAVA - 變量始終爲空

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

    } 

} 
+0

這是因爲你永遠不會覺得值是。 –

+1

您不更新'checktypezip'方法中的'DEVICE',因爲'string'不是指針。 'string =「foo」'不會更新'DEVICE'。 PS:這是一個很好的無限循環;) – AxelH

+1

將返回類型添加到checktypezip或從其中刪除param並直接訪問成員變量。 –

回答

5

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

+0

這有效。謝謝 –