Java 使用AsyncTask登录用户
我需要获取Java 使用AsyncTask登录用户,java,android,android-studio,android-asynctask,jreddit,Java,Android,Android Studio,Android Asynctask,Jreddit,我需要获取user并将其保存到变量 public class MainActivity extends ActionBarActivity { User user = new LoginTask2().execute(""); } class LoginTask2 extends AsyncTask<String, Void, User> { private Exception exception; public String hash = "";
user
并将其保存到变量
public class MainActivity extends ActionBarActivity
{
User user = new LoginTask2().execute("");
}
class LoginTask2 extends AsyncTask<String, Void, User> {
private Exception exception;
public String hash = "";
protected String doInBackground(String... t) {
RestClient restClient = new HttpRestClient();
restClient.setUserAgent("bot/1.0 by name");
// Connect the user
User user = new User(restClient, "User", "somepass");
try {
user.connect();
//hash = user.getModhash();
return user;
} catch (Exception e) {
e.printStackTrace();
this.exception = e;
return null;
}
}
protected void onPostExecute(String string) {
}
}
public class MainActivity extends ActionBarActivity
{
User mUser;
new LoginTask2().execute("");
class LoginTask2 extends AsyncTask<String, Void, User> {
private Exception exception;
public String hash = "";
protected User doInBackground(String... t) {
RestClient restClient = new HttpRestClient();
restClient.setUserAgent("bot/1.0 by name");
// Connect the user
User user = new User(restClient, "User", "somepass");
try {
user.connect();
//hash = user.getModhash();
return user;
} catch (Exception e) {
e.printStackTrace();
this.exception = e;
return null;
}
}
protected void onPostExecute(User user) {
mUser = user;
}
}
}
有人能告诉我如何更改代码吗?您的异步任务已声明:
class LoginTask2 extends AsyncTask<String, Void, User> {
protected String doInBackground(String... t) {
见:
您在上面拥有的代码:
User user = new LoginTask2().execute("");
也将失败,因为您必须执行异步任务,然后稍后使用返回值。您可以访问返回的
用户
对象,方法是将其设置为main活动
中的一个字段,然后在异步任务
完成后使用该对象。您的异步任务已声明:
class LoginTask2 extends AsyncTask<String, Void, User> {
protected String doInBackground(String... t) {
见:
您在上面拥有的代码:
User user = new LoginTask2().execute("");
也将失败,因为您必须执行异步任务,然后稍后使用返回值。您可以通过将返回的
User
对象设置为MainActivity
中的一个字段来访问该对象,然后在AsyncTask
完成后使用该对象。将您的asyntask定义为内部类,并在onPostExecute中分配mUser类变量
public class MainActivity extends ActionBarActivity
{
User user = new LoginTask2().execute("");
}
class LoginTask2 extends AsyncTask<String, Void, User> {
private Exception exception;
public String hash = "";
protected String doInBackground(String... t) {
RestClient restClient = new HttpRestClient();
restClient.setUserAgent("bot/1.0 by name");
// Connect the user
User user = new User(restClient, "User", "somepass");
try {
user.connect();
//hash = user.getModhash();
return user;
} catch (Exception e) {
e.printStackTrace();
this.exception = e;
return null;
}
}
protected void onPostExecute(String string) {
}
}
public class MainActivity extends ActionBarActivity
{
User mUser;
new LoginTask2().execute("");
class LoginTask2 extends AsyncTask<String, Void, User> {
private Exception exception;
public String hash = "";
protected User doInBackground(String... t) {
RestClient restClient = new HttpRestClient();
restClient.setUserAgent("bot/1.0 by name");
// Connect the user
User user = new User(restClient, "User", "somepass");
try {
user.connect();
//hash = user.getModhash();
return user;
} catch (Exception e) {
e.printStackTrace();
this.exception = e;
return null;
}
}
protected void onPostExecute(User user) {
mUser = user;
}
}
}
公共类MainActivity扩展了ActionBarActivity
{
用户缪斯;
新建LoginTask2()。执行(“”);
类LoginTask2扩展了异步任务{
私人例外;
公共字符串哈希=”;
受保护用户doInBackground(字符串…t){
RestClient RestClient=new-HttpRestClient();
setUserAgent(“bot/1.0按名称”);
//连接用户
用户用户=新用户(restClient,“User”,“somepass”);
试一试{
user.connect();
//hash=user.getModhash();
返回用户;
}捕获(例外e){
e、 printStackTrace();
这个异常=e;
返回null;
}
}
受保护的void onPostExecute(用户){
缪斯=用户;
}
}
}
将asyntask定义为内部类,并在onPostExecute上分配mUser类变量
public class MainActivity extends ActionBarActivity
{
User user = new LoginTask2().execute("");
}
class LoginTask2 extends AsyncTask<String, Void, User> {
private Exception exception;
public String hash = "";
protected String doInBackground(String... t) {
RestClient restClient = new HttpRestClient();
restClient.setUserAgent("bot/1.0 by name");
// Connect the user
User user = new User(restClient, "User", "somepass");
try {
user.connect();
//hash = user.getModhash();
return user;
} catch (Exception e) {
e.printStackTrace();
this.exception = e;
return null;
}
}
protected void onPostExecute(String string) {
}
}
public class MainActivity extends ActionBarActivity
{
User mUser;
new LoginTask2().execute("");
class LoginTask2 extends AsyncTask<String, Void, User> {
private Exception exception;
public String hash = "";
protected User doInBackground(String... t) {
RestClient restClient = new HttpRestClient();
restClient.setUserAgent("bot/1.0 by name");
// Connect the user
User user = new User(restClient, "User", "somepass");
try {
user.connect();
//hash = user.getModhash();
return user;
} catch (Exception e) {
e.printStackTrace();
this.exception = e;
return null;
}
}
protected void onPostExecute(User user) {
mUser = user;
}
}
}
公共类MainActivity扩展了ActionBarActivity
{
用户缪斯;
新建LoginTask2()。执行(“”);
类LoginTask2扩展了异步任务{
私人例外;
公共字符串哈希=”;
受保护用户doInBackground(字符串…t){
RestClient RestClient=new-HttpRestClient();
setUserAgent(“bot/1.0按名称”);
//连接用户
用户用户=新用户(restClient,“User”,“somepass”);
试一试{
user.connect();
//hash=user.getModhash();
返回用户;
}捕获(例外e){
e、 printStackTrace();
这个异常=e;
返回null;
}
}
受保护的void onPostExecute(用户){
缪斯=用户;
}
}
}
调用execute方法时,AsyncTask不会返回用户变量。
所以下面的代码将不起作用
User user = new LoginTask2().execute("");
让我们做一些改变
private class LoginTask2 extends AsyncTask<String, Void, User> {
private Exception exception;
public String hash = "";
@Override
protected String doInBackground(String... t) {
RestClient restClient = new HttpRestClient();
restClient.setUserAgent("bot/1.0 by name");
// Connect the user
User user = new User(restClient, "User", "somepass");
try {
user.connect();
//hash = user.getModhash();
return user;
} catch (Exception e) {
e.printStackTrace();
this.exception = e;
return null;
}
}
protected void onPostExecute(User user) {
}
}
您还可以从类中调用方法,例如:
public class MainActivity extends ActionBarActivity {
User user = new LoginTask2().execute("");
private void success(User user){
//do save stuff
}
private void failure(){
}
private class LoginTask2 extends AsyncTask<String, Void, User> {
private Exception exception;
public String hash = "";
@Override
protected String doInBackground(String... t) {
RestClient restClient = new HttpRestClient();
restClient.setUserAgent("bot/1.0 by name");
// Connect the user
User user = new User(restClient, "User", "somepass");
try {
user.connect();
//hash = user.getModhash();
return user;
} catch (Exception e) {
e.printStackTrace();
this.exception = e;
return null;
}
}
protected void onPostExecute(User user) {
if(user != null)
success(user)
else
failure()
}
}
}
公共类MainActivity扩展了ActionBarActivity{
User=new LoginTask2().execute(“”);
私有void成功(用户){
//一定要节约
}
私有无效失效(){
}
私有类LoginTask2扩展了异步任务{
私人例外;
公共字符串哈希=”;
@凌驾
受保护的字符串背景(字符串…t){
RestClient RestClient=new-HttpRestClient();
setUserAgent(“bot/1.0按名称”);
//连接用户
用户用户=新用户(restClient,“User”,“somepass”);
试一试{
user.connect();
//hash=user.getModhash();
返回用户;
}捕获(例外e){
e、 printStackTrace();
这个异常=e;
返回null;
}
}
受保护的void onPostExecute(用户){
如果(用户!=null)
成功(用户)
其他的
失败()
}
}
}
您还可以捕获失败:)调用execute方法时,AsyncTask不会返回用户变量。 所以下面的代码将不起作用
User user = new LoginTask2().execute("");
让我们做一些改变
private class LoginTask2 extends AsyncTask<String, Void, User> {
private Exception exception;
public String hash = "";
@Override
protected String doInBackground(String... t) {
RestClient restClient = new HttpRestClient();
restClient.setUserAgent("bot/1.0 by name");
// Connect the user
User user = new User(restClient, "User", "somepass");
try {
user.connect();
//hash = user.getModhash();
return user;
} catch (Exception e) {
e.printStackTrace();
this.exception = e;
return null;
}
}
protected void onPostExecute(User user) {
}
}
您还可以从类中调用方法,例如:
public class MainActivity extends ActionBarActivity {
User user = new LoginTask2().execute("");
private void success(User user){
//do save stuff
}
private void failure(){
}
private class LoginTask2 extends AsyncTask<String, Void, User> {
private Exception exception;
public String hash = "";
@Override
protected String doInBackground(String... t) {
RestClient restClient = new HttpRestClient();
restClient.setUserAgent("bot/1.0 by name");
// Connect the user
User user = new User(restClient, "User", "somepass");
try {
user.connect();
//hash = user.getModhash();
return user;
} catch (Exception e) {
e.printStackTrace();
this.exception = e;
return null;
}
}
protected void onPostExecute(User user) {
if(user != null)
success(user)
else
failure()
}
}
}
公共类MainActivity扩展了ActionBarActivity{
User=new LoginTask2().execute(“”);
私有void成功(用户){
//一定要节约
}
私有无效失效(){
}
私有类LoginTask2扩展了异步任务{
私人例外;
公共字符串哈希=”;
@凌驾
受保护的字符串背景(字符串…t){
RestClient RestClient=new-HttpRestClient();
setUserAgent(“bot/1.0按名称”);
//连接用户
用户用户=新用户(restClient,“User”,“somepass”);
试一试{
user.connect();
//hash=user.getModhash();
返回用户;
}捕获(例外e){
e、 printStackTrace();
这个异常=e;
返回null;
}
}
受保护的void onPostExecute(用户){
如果(用户!=null)
成功(用户)
其他的
失败()
}
}
}
您还可以捕获故障:)另一种方法是使用接口。如果您不想使用内部类,我可以发布带有接口的类,另一种方法是使用接口。如果您不想使用内部类,我可以发布一个带有接口的类