基于异步调用返回值的方法

时间:2016-01-04 02:26:21

标签: android api android-asynctask

我的程序需要将用户的名称作为String,并调用API以查看它是否存在。我创建了一个接收该字符串的方法,并执行异步任务来发送API调用。但看起来我的方法中的比较正在异步任务完成之前执行。实现这样的事情的正确方法是什么

 public boolean checkUser(String name) {
    checkedName = name;
    checkValidSummoner check = new checkValidSummoner();
    check.execute();

    if (checkedName == null) {
        return false;
    } else {
        return true;
    }
}

private class checkValidSummoner extends AsyncTask<String, Void, Void> {
    @Override
    protected void onPreExecute() {

    }

    @Override
    protected Void doInBackground(String... strings) {
        try {
            checkedName = RiotAPI.getSummonerByName(checkedName).toString();
        } catch (APIException e) {
            checkedName = null;
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {

    }
}

1 个答案:

答案 0 :(得分:0)

你不能这样做。
请使用听众。

public boolean checkUser(String name, OnCheckValidEndListener listener) {
    checkedName = name;
    checkValidSummoner check = new checkValidSummoner(listener);
    check.execute();


}

public interface OnCheckValidEndListener {
    void onCheckValidEnd(String checkedName);
}

private class checkValidSummoner extends AsyncTask<String, Void, Void> {

    private final OnCheckValidEndListener listener;

    checkValidSummoner(OnCheckValidEndListener listener) {
        this.listener = listener;
    }
    @Override
    protected void onPreExecute() {

    }

    @Override
    protected Void doInBackground(String... strings) {
    try {
        checkedName = RiotAPI.getSummonerByName(checkedName).toString();
    } catch (APIException e) {
        checkedName = null;
    }
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        listener.onCheckValidEnd(checkedName);

    }
}

请使用流动代码

    checkUser("jon",new OnCheckValidEndListener() {
        @Override
        public void onCheckValidEnd(String checkedName) {
            if (checkedName == null) {
                // invalid
            } else {
                // valid
            }
        }
    });