2016-12-04 57 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”函数作为“注册”过程的一部分。让我看到的电池 –