2017-02-28 123 views
2

我在本地主機中使用排氣連接,並在本地主機中有一個php文件。下面是我的課VolleyConnectionLogin和我也有一個凌空單身類(沒有錯誤)..在「返回檢查」時布爾檢查的值爲空

public class VolleyConnectionLogin { 

    Context context; 
    public VolleyConnectionLogin(Context context){ 
     this.context = context; 
    } 

    static Boolean check; 
    public Boolean volleyConnection(final String username , final String password) { 
     String tag_string_req = "string_req"; 
     String url = "http://192.168.10.8/login/forlogin.php"; 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, 
       url, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         Log.d(TAG, response.toString()); 
         if(response.toString().equals("successful")){ 
          check = true; 
         }else{ 
          check = false; 
         } 
        } 
       }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       check = false; 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
      } 
     }) { 

      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("uname", username); 
       params.put("pword", password); 
       return params; 
      } 

     }; 
     VolleySingleton.getInstance(context).addToRequestQueue(stringRequest); 
     return check; 
    } 
} 
+0

'check'變量總是爲false,因爲您正在使用回調方法'onResponse'方法設置'check'變量的值。 –

+0

使用false來初始化檢查,例如'static Boolean check = false;',因爲'Boolean'類型的默認值爲'null'。 –

回答

1

check爲null,因爲該請求是asynchronous,所以當以下行被稱爲

VolleySingleton.getInstance(context).addToRequestQueue(stringRequest); 

該程序然後前進到下一行是

return check; // (which is still null) 

而背景另一個線程開始處理該請求。

您可能會modify the request to be synchronous或修改您的代碼,以便取決於此方法的返回取決於發生onResponse()Response.Listener回調中的代碼。

1

,因爲你正在返回你的線程在其接收響應的布爾外,這一個

Log.d(TAG, response.toString()); 
         if(response.toString().equals("successful")){ 
          check = true; 
         }else{ 
          check = false; 
         } 
        } 

控制轉到return check;響應返回之前。