2016-12-04 33 views
1

我已經嘗試了Android Volley return value from response的方法,但我不斷收到此錯誤:com.box.ajian.box.Controllers.IOFunctions無法轉換爲com.box.ajian.box.Constants.VolleyCallback 。我應該在我的鑄造區放置什麼工作?我對這種排球比賽感到困惑。Android Volley從onResponse問題得到回覆

這是我的代碼。希望有人能幫助我

IOFunctions.java(不活動)

public void checkIfPersonExists(final Context context, final Person aPerson){ 
     StringRequest postRequest = new StringRequest(Request.Method.POST, USEREXISTS, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       Log.d("RESPONSE",response.toString()); 
       ((VolleyCallback)context).onSuccess(response.toString()); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       error.printStackTrace(); 
      } 
     }){ 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       Map<String,String> params = new HashMap<>(); 
       params.put("email",aPerson.getEmail()); 
       params.put("phone",aPerson.getPhone()); 
       return params; 
      } 
     }; 
     Volley.newRequestQueue(context).add(postRequest); 
    } 

Functions.java(不活動)

public Boolean register(Person aPerson,Context context){ 
     ioFunctions.checkIfPersonExists(context,aPerson); 
     new VolleyCallback(){ 
      @Override 
      public void onSuccess(String result) { 
       if(result.equals(false)){ 
        Log.d("HELLO","HELLO"); 
       } 
      } 
     }; 
    return false; 
} 

Register.java(活動)

functions.register(new Person(Firstname,Lastname,functions.dateFormatter(DateofBirth),Email,Password,Phone),Register.this); 

接口

public interface VolleyCallback { 
    void onSuccess(String result); 
} 

活動寄存器調用functions.java然後調用iofunctions.java。我希望iofunctions.java返回true或false,所以我依靠凌空。

回答

0

你不需要你自己的回調類。排球來自它自己!

只需將它添加到參數中,將它傳遞給請求。

public void checkIfPersonExists(final Context context, final Person aPerson, 
    Response.Listener<String> onResponse){ // <-- here 
     StringRequest postRequest = new StringRequest(Request.Method.POST, USEREXISTS, 
      onResponse, // <--- here 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        error.printStackTrace(); 
       } 
      }){ 
       @Override 
       protected Map<String, String> getParams() throws AuthFailureError { 
        Map<String,String> params = new HashMap<>(); 
        params.put("email",aPerson.getEmail()); 
        params.put("phone",aPerson.getPhone()); 
        return params; 
       } 
     }; 
    Volley.newRequestQueue(context).add(postRequest); 
} 

然後進行相應處理,但因爲排球是異步不要使用此法的回報。

public void register(Person aPerson,Context context){ 
    ioFunctions.checkIfPersonExists(context,aPerson, 
     new Response.Listener<String>(){ 
      @Override 
      public void onResponse(String response) { 
       boolean exists = !result.equals("false"); 
       if(!exists){ 
        Log.d("Person exists","Nope!"); 
        // Person does not exist... continue registration from here 
       } else { 
        Log.d("Person exists", "That account exists!"); 
       } 
      } 
     }; 
    // Don't return here 
} 
+0

感謝您的回答。但我想從功能中獲得迴應。我想把它返回到另一個函數 – JianYA

+0

你不能使用'return'。這是我的觀點。你必須使用回調。如果你需要'register'函數的響應,那麼你必須爲一個 –

+0

添加另一個參數。不過,你應該讓後端執行「user exists」函數作爲「註冊」過程的一部分。讓我看到的電池 –