2017-01-27 5 views
1

ファイルが存在するかどうかにかかわらず変数DEVICEが変更されるこのコードを作成しました。だから私はこのコードを作ったが、変数は、常にnullです。JAVA - 変数は常に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; 
     } 

    } 

} 
+0

に置き換えることをお勧めします。なぜなら、あなたは値を決して与えないからです。 –

+1

'string'はポインタではないので、' checktypezip'メソッドで 'DEVICE'を更新していません。 'string =" foo "'は 'DEVICE'を更新しません。 PS:これは素晴らしい無限ループです) – AxelH

+1

checktypezipに戻り型を追加するか、paramを削除してメンバー変数に直接アクセスします。 –

答えて

5

Javaは「値渡し」を使用します。これは、DEVICEであることを意味し、参照ではありません。値stringに値を割り当てても、それは決してDEVICEに割り当てられません。

あなたの関数からdispの値を返すと、この

public String checktypezip() 

のように、あなたの関数を定義し、最後にはこの

DEVICE = checktypezip(); 

のようにそれを呼び出すDEVICE

に割り当てる必要がありますchecktypezipの場合、追加する必要があります。return disp

サイドノートでは

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

これは無限にあなたのメインスレッドをブロックし、5秒後にANRの原因となります。私はwhileif

+0

これは機能します。ありがとう –

関連する問題