如何从回调接口获取Object值?

时间:2016-02-16 21:24:48

标签: java android interface callback

第一个问题,我开始使用java编程..

我有一个AssyncTask方法,它使用一个接口来获取用户信息一旦完成,从OnPostExecute调用它。这一切都很好,但是一旦我收到关于我的主要活动的数据,我就无法提取用户完成的方法。

我发布代码以便更好地理解。

 new FetchUserDataAsyncTask(user, new GetUserCallBack() {

                @Override
                public void done(User returnedUser) {

                    String usernameRet = returnedUser.username;
                    String passwordRet = returnedUser.password;
                }

            });

和界面:

public interface GetUserCallBack {

    public abstract void done(User returnedUser);
}

AsynkTask:

public class FetchUserDataAsyncTask extends AsyncTask<Void, Void, User> {

    RequestHandler rh = new RequestHandler();
    User user;
    User ret_user;
    GetUserCallBack usercallback;


    public FetchUserDataAsyncTask(User user, GetUserCallBack usercallback){
        this.user  = user;
        this.usercallback = usercallback;

    }


    @Override
    protected User doInBackground(Void... params) {
        try {
            HashMap<String, String> dataToSend = new HashMap<>();
            dataToSend.put("username", user.username);
            dataToSend.put("password", user.password);
            ret_user = rh.sendGetRequest("www.fjrmy.php", dataToSend);
            return null;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ret_user;
    }

    @Override
    protected void onPostExecute(User returnedUser) {
        super.onPostExecute(ret_user);
        usercallback.done(returnedUser);
    }


}

我只是想“解压缩”usernameRet和passwordRet以使用它们。有可能吗?

非常感谢你。

2 个答案:

答案 0 :(得分:0)

你的AsnycTask总是返回null。 删除这一行:

 return null;

也不需要保持AsyncTask中的返回值。这应该有效:

public class FetchUserDataAsyncTask extends AsyncTask<Void, Void, User> {

    RequestHandler rh = new RequestHandler();
    User user;
    GetUserCallBack usercallback;


    public FetchUserDataAsyncTask(User user, GetUserCallBack usercallback){
        this.user = user;
        this.usercallback = usercallback;

    }


    @Override
    protected User doInBackground(Void... params) {
        try {
            HashMap<String, String> dataToSend = new HashMap<>();
            dataToSend.put("username", user.username);
            dataToSend.put("password", user.password);
            return rh.sendGetRequest("www.fjrmy.php", dataToSend);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(User returnedUser) {
        super.onPostExecute(returnedUser);
        usercallback.done(returnedUser);
    }


}

答案 1 :(得分:-1)

AsyncTask中,如果null方法成功,则会在try块中返回rh.sendGetRequest,将其更改为return ret_user;

您似乎也未在示例代码中的execute上致电AsyncTask

final User user = new User(); <--- declare a field or outer variable

FetchUserDataAsyncTask task = new FetchUserDataAsyncTask(user, new GetUserCallBack() {
      @Override
      public void done(User retUser) {
          user.username = retUser.username; // <--- set variables
          user.password = retUser.password; // <---
      }
});
task.execute(); // <----- missing this