http请求完成后返回调用函数

时间:2015-09-30 10:51:44

标签: android androidhttpclient android-async-http

我尝试使用ASP.Net Web Api实现登录到Android应用程序 到目前为止,我所拥有的功能是有效的,只是我想使登录请求变为同步而非异步。 我正在使用 Android异步Http客户端,就像他们在网站上所说的那样。

public class ApiInterface {
    public static final String ApiURL = "http://******/api/";

    private static AsyncHttpClient client = new AsyncHttpClient();

    public static void get4Login(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
        client.get(getAbsoluteUrl(url), params, responseHandler);
    }

    private static String getAbsoluteUrl(String relativeUrl) {
        return ApiURL + relativeUrl;
    }
}

我在LoginActivity中有这个功能:

private boolean doLogIn(String user, String pass) {
    boolean result = false;

    if (user.trim().isEmpty() || pass.trim().isEmpty()) {
        return false;
    }
    RequestParams params = new RequestParams();
    params.add("user", user);
    params.add("pass", pass);

    ApiInterface.get4Login("Auth", params, new TextHttpResponseHandler() {
        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable error) {
            Toast.makeText(MyApp.getContext(), "Error: " + error.getMessage(), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onSuccess(int statusCode, Header[] headers, String responseString) {
            //***Here I want to set the doLogIn() function result depending on the response from the server;***
            Toast.makeText(MyApp.getContext(), "Lista sesizari incarcata!", Toast.LENGTH_LONG).show();
        }
    });

    return result;
}

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

在你的MyTextHttpResponseHandler类上应该定义一个名为result的变量,set type是boolean,默认为false,然后定义一个方法来获取结果值,就像 public boolean getResult(){return this.result;} 然后,您可以更改resultonSuccess方法的onFailure值。 接下来,您的doLogIn方法会喜欢这个

private boolean doLogIn(String user, String pass) {
//boolean result = false;

if (user.trim().isEmpty() || pass.trim().isEmpty()) {
    return false;
}
RequestParams params = new RequestParams();
params.add("user", user);
params.add("pass", pass);
MyTextHttpResponseHandler myTextHttpResponseHandler = new MyTextHttpResponseHandler(this);
ApiInterface.get4Login("Auth", params, myTextHttpResponseHandler);
return myTextHttpResponseHandler.getResult();
}