2016-03-15 64 views
-1

我對Java和Android Studio非常新穎。我正在創建一個登錄腳本,一切正常,但我需要設置一個變量爲falsetrue。 Java告訴我我無法更新變量,因爲我正在使用public void。所以我正在努力解決這個問題,但它根本不工作。這是我的代碼Android Studio無法更新公共變量

public String errorNumber = "0"; 

即在下面的方法

public boolean validate() { 

     boolean valid = true; 


     String email = _emailText.getText().toString().trim(); 
     String password = _passwordText.getText().toString().trim(); 

     final String Password = _passwordText.getText().toString().trim(); 
     final String Email = _emailText.getText().toString().trim(); 

     if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) { 
      _emailText.setError("Vul een geldige email in"); 
      valid = false; 


     } else { 
      _emailText.setError(null); 
     } 

     if (password.isEmpty() || password.length() < 8 || password.length() > 20) { 
      _passwordText.setError("Vul een geldig wachtwoord in"); 
      valid = false; 


     } else { 


      StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL, 
        new Response.Listener<String>() { 

         @Override 
         public void onResponse(String response) { 

          String[] output = response.split(":"); 
          String output2 = output[2]; 
          String[] setNumber = output[1].split(","); 
          String responseDetails1 = output2.replace("\"", ""); 
          String responseDetails = responseDetails1.replace("}", ""); 
          String responsNumber = setNumber[0]; 

          Log.d("RESPONSE1", response); 
          Log.d("RESPONSE2", setNumber[0]); 
          Log.d("RESPONSE3", responseDetails); 

          if(responsNumber.equals("0")){ 

           errorNumber = "0"; 

           //Toast.makeText(login.this, responseDetails, Toast.LENGTH_LONG).show(); 

           Log.d("THERE IS AN ERROR", responseDetails); 
          }else{ 

           _passwordText.setError(null); 

           errorNumber = "1"; 

           //Toast.makeText(login.this, responseDetails, Toast.LENGTH_LONG).show(); 

           Log.d("LOGIN SUCCESS", responseDetails); 

           //Intent i = new Intent(login.this, login.class); 

           // startActivity(i); 
          } 


         } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          Toast.makeText(login.this,error.toString(),Toast.LENGTH_LONG).show(); 
         } 
        }){ 
       @Override 
       protected Map<String,String> getParams(){ 
        Map<String,String> params = new HashMap<>(); 
        params.put(KEY_PASSWORD, Password); 
        params.put(KEY_USEREMAIL, Email); 

        return params; 
       } 

      }; 

      RequestQueue requestQueue = Volley.newRequestQueue(this); 
      requestQueue.add(stringRequest); 

     } 
     Log.d("ERRORNUMBER", errorNumber); 

     if (errorNumber.equals("0")){ 
      valid = false; 
     } 

     Log.v("VALID STATUS", ""+ valid); 

     return valid; 
    } 

對不起,我的代碼長塊正在使用的變量,但它基本上更新valid爲真或假。因爲我無法在我的if聲明中做到這一點,所以我想爲什麼不設置變量並稍後檢查它是否設置爲1或0?然後相應地更新有效的布爾值。

沒有我迄今試過的作品,我出來的解決方案。我搜索了網頁,但找不到解釋爲什麼我無法更新該更新變量的任何內容,因此我可以在我的最後一條if聲明中使用它。

+2

你在標題中提到的公共變量在哪裏? –

+0

它在這裏,抱歉它說私人,因爲我也試過,但它被設置爲公開。仍然不起作用。 public String errorNumber =「0」; – carlosx2

+1

你的問題說你不能更新公共變量,但是你在代碼中顯示的是私有變量。 –

回答

1

如果我沒有弄錯,你做錯了什麼是你在方法中聲明變量。這會導致它們在方法結束後被刪除。有很多方法可以解決這個問題,我會給你兩種方法。

  1. 你應該在每個方法的外部聲明'valid','email'和'password'變量。這樣,當您調用該方法時,無論您如何處理變量,都會被保存。

  2. 您可以使validate()方法返回一個變量。例如,讓該方法返回「有效」變量,然後一旦退出該方法,就會得到「有效」的值。

編輯:只是想過3.你可以做到這一點。你可以創建一個單獨的類,在validate()方法中創建一個對象並返回整個對象。這樣你就可以得到所有3個變量而不用爲整個班級宣佈它們。

Public class email() { 
    Boolean valid; 
    String password; 
    String email: 
} 

如果此答案不可理解,請要求進一步澄清。如果需要,我也可以發佈示例代碼。