第一个问题,我开始使用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以使用它们。有可能吗?
非常感谢你。
答案 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