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)
成功(用户)
其他的
失败()
}
} 
}

您还可以捕获故障:)

另一种方法是使用接口。如果您不想使用内部类,我可以发布带有接口的类,另一种方法是使用接口。如果您不想使用内部类,我可以发布一个带有接口的类