有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从回调接口获取对象值?

第一个问题,我从java编程开始

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

我张贴代码以便更好地理解

 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) 个答案

  1. # 1 楼答案

    您的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);
        }
    
    
    }
    
  2. # 2 楼答案

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

    在示例代码中,您似乎也没有在AsyncTask上调用execute

    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