我整天都在想一些事情。
问题是,我有一个 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/