2017-04-20 59 views
0

当我在android中使用接口时,我如何将它作为方法返回?例如:如何在java的类中使用接口?

public interface Status { 
    public void Oncheck(boolean Ok); 
} 

public boolean Login(String Username, String Password) 
{ 
    apic.Execute_Bool(
      "/Login_Small?username=" + Username + "&password=" + Password + "", new Status() { 
       @Override 
       public void Oncheck(boolean Ok) { 
        return ; 
       } 
      }); 
} 

public void Execute_Bool(String Url,final Status callback) 
{ 
    Api_HttpClient.get(Url, null, new AsyncHttpResponseHandler() { 
     @Override 
     public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { 
      if (statusCode==200) 
      callback.Oncheck(true); 
      else callback.Oncheck(false); 
     } 

     @Override 
     public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { 
      callback.Oncheck(false); 
     } 
    }); 
} 

当我使用登录信息(用户名,密码)无布尔返回。 但在使用时

 apic.Execute_Bool(
     "/Login_Small?username=" + Username + "&password=" + Password + "", new Status() { 
      @Override 
      public void Oncheck(boolean Ok) { 
       return ; 
      } 
     }); 

在活动是工作。 我能做些什么来设置它在方法?

+0

请注意,您可以替换一个像if(statusCode == 200) callback.Oncheck(true); else callback.Oncheck(false)'用一个简单的'callback.Oncheck(statusCode == 200)' –

回答

0

您的登录方法方法没有return语句,我怀疑这个代码甚至编译这样。
由于您已经进行异步http调用,因此您无法真正使登录方法同步返回。您的代码将按照以下顺序进行:

1: Login method is invoked 
2: apic.Execute_Bool is invoked 
3: Api_HttpClient.get is invoked 
4: Api_HttpClient.get returns 
5: apic.Execute_Bool returns 
6: Login returns 
?: Status.Oncheck is invoked (Could be called at any time, but most likely after Login has returned) 

有解决这个问题的2种方式:
你可以重构代码,以便它调用登录方法不需要返回值,写的另一种方法然后从Oncheck方法调用它。
或者你可以寻找一个同步的方式来做出这个http请求,你必须检查那个文档。
顺便说一下,在java中,以大写字母开头的唯一名称是类名。方法和变量以小写使用camelCase(apic.executeBool)开头。