java - 试图从 OnPostExecute 中获取一个值

标签 java android android-asynctask

我整天都在想一些事情。

问题是,我有一个 AsyncTask,它返回一个用户对象及其所有属性。我知道我必须从 doInBackground 方法返回并在 OnPostExecute 中接收才能处理我的数据。事实上,我想从 AsyncTask 方法中提取该用户,因为我必须在我的主线程中使用它。 我的 AsyncTask 类放在 MainActivity.class 中。

我听说过使用接口(interface)来取回我的值(value),但我不明白该怎么做。

 public class FetchUserDataAsyncTask extends AsyncTask<Void, Void, User> {
    RequestHandler rh = new RequestHandler(); //this is the class i use to do de server conection
    User user;
    User ret_user;


    public FetchUserDataAsyncTask(User user){
        this.user  = user;
    }


    @Override
    protected void onPostExecute(User user) {
        super.onPostExecute(user);

   //I WANT THIS USER IN MY MAIN THREAD, TO WORK WITH ITS ATTRIBUTES

    }



    @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("myadresstophp.php", dataToSend);

        } catch (Exception e) {
            e.printStackTrace();
        }

 return ret_user;
 }

和调用(当用户按下登录按钮时),上面几行。

 new FetchUserDataAsyncTask(userk).execute();

我希望做那样的事情:(我知道这不是办法)

User user = new FetchUserDataAsyncTask(userk).execute();

谢谢大家,祝你有个愉快的一天!

最佳答案

首先在项目的某处声明一个具有所需功能的接口(interface),然后在 (AsyncTask) 调用类中实现该接口(interface),然后在 AsyncTask 中声明一个接口(interface)对象。创建 AsyncTask 的构造函数如下:

public FetchUserDataAsyncTask(User user,InterfaceClass object){
    this.user  = user;
    this.interfaceObject=object;
}

然后在 onPostExecute 中执行以下操作:

@Override
protected void onPostExecute(User user) {
    super.onPostExecute(user);
    interfaceObject.function(user);  //call the function of the calling class

}

关于java - 试图从 OnPostExecute 中获取一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35462925/

相关文章:

java - Android 中的 Parse.com 云代码和 HashMap : How to set an array inside Hashmap?

android - 操作栏自定义 View

java - Android 对话框无法正常显示

java - Spring MVC - 从 JSP 提交对象

java - 未返回 dateTimeFormatter 短时区名称

尝试从 Apache Tomcat 上的 Eclipse 运行 Servlet 项目时出现 java.lang.NullPointerException

android - ktor android本地http服务器抛出错误

android - WebView 应用程序 : How to download a file inside webview app & external link should open outside the app

android - android中的service、intentService有什么区别?

android - ArrayList 突然变为 null,以前不是 null