Android——登陆界面的异步实现

public class MainActivity extends BaseActivity {
    private String path;
    String userText;
    String passText;

    @InjectView(R.id.login_btn) Button login_btn;
    @InjectView(R.id.ft_username) EditText ft_username;
    @InjectView(R.id.ft_password) EditText ft_password;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//         登陆
        login_btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                userText = ft_username.getText().toString().trim();
                passText = ft_password.getText().toString().trim();
                new LoginTask(MainActivity.this, userText, passText).execute();
            }
        });
    }

    class LoginTask extends AsyncTask<Void, String, Boolean> {
        private Context context;
        private String userText;
        private String passText;

        public LoginTask(Context context, String userText, String passText) {
            this.context = context;
            this.userText = userText;
            this.passText = passText;
        }

        /**
         * 运行在UI线程中,在调用doInBackground()之前执行
         */
        @Override
        protected void onPreExecute() {
            path = "http://106.120.172.113:8080/ftyy/login/loginAction!applogin.dhtml?userName=" + userText + "&password=" + passText;
        }

        /**
         * 后台运行的方法,可以运行非UI线程,可以执行耗时的方法
         */
        @Override
        protected Boolean doInBackground(Void... params) {

            Map<String, String> map = new HashMap<String, String>();
            // 通过HttpUrlConnection发送GET请求
            try {
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5000);
                conn.setRequestMethod("GET");
                int code = conn.getResponseCode();

                if (code == 200) {
                    InputStream is = conn.getInputStream();
                    String msg = streamToString(is);
                    map = parseJsonStr(msg);
                    Boolean status = map.get("msg").equals("登录成功");
                   // Toast.makeText(MainActivity.this, "insert success", Toast.LENGTH_LONG).show();
                    return status;
                }else{
                    return false;
                }
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }

        }

        /**
         * 运行在ui线程中,在doInBackground()执行完毕后执行
         */
        @Override
        protected void onPostExecute(Boolean flag) {
            if (flag) {
                Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
                //跳转到主界面
                Intent intent = new Intent(MainActivity.this, MainUI.class);
                context.startActivity(intent);
            } else {
                Toast.makeText(MainActivity.this, "登陆失败,请重新登陆", Toast.LENGTH_SHORT).show();
            }
        }

        public String streamToString(InputStream is) {
            ByteArrayOutputStream baos = null;
            try {
                baos = new ByteArrayOutputStream();//此类实现了一个输出流,其中的数据被写入一个 byte 数组。
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = is.read(buffer)) != -1) {
                    baos.write(buffer, 0, len);
                }
                byte[] byteArray = baos.toByteArray();//创建一个新分配的byte数组
                return new String(byteArray);
            } catch (Exception e) {
                return null;
            }finally {
                if(baos==null){
                    try {
                        baos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                if(is==null){
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

        public Map<String, String> parseJsonStr(String jsonStr) {
            return JSON.parseObject(jsonStr, new TypeReference<Map<String, String>>() {
                    });
        }
    }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android 上生成登录界面,可以按照以下步骤进行操作: 1. 创建一个新的 Android 项目并在 XML 布局文件中创建登录界面的 UI 元素,例如 EditText、Button 等。 2. 在 MainActivity.java 文件中,获取 UI 元素的引用,以便在用户点击“登录”按钮时获取输入的用户名和密码。 3. 创建一个名为 LoginTask 的异步任务类,该类将使用用户名和密码向服务器发出登录请求。在 doInBackground() 方法中执行网络操作,例如使用 HttpURLConnection 或 HttpClient 发送 POST 请求。 4. 在 onPostExecute() 方法中处理登录响应。如果登录成功,则可以使用 Intent 在活动之间传递数据,例如将用户 ID 传递给主界面。 5. 在 AndroidManifest.xml 文件中注册 LoginActivity 和 MainActivity。 下面是一个简单的示例代码,可以作为参考: ```java public class LoginActivity extends AppCompatActivity { private EditText mUsernameEditText; private EditText mPasswordEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mUsernameEditText = findViewById(R.id.username_edit_text); mPasswordEditText = findViewById(R.id.password_edit_text); Button loginButton = findViewById(R.id.login_button); loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String username = mUsernameEditText.getText().toString(); String password = mPasswordEditText.getText().toString(); new LoginTask().execute(username, password); } }); } private class LoginTask extends AsyncTask<String, Void, Boolean> { @Override protected Boolean doInBackground(String... params) { String username = params[0]; String password = params[1]; // TODO: 发送登录请求并处理响应 // 返回 true 表示登录成功,false 表示登录失败 return true; } @Override protected void onPostExecute(Boolean success) { if (success) { Intent intent = new Intent(LoginActivity.this, MainActivity.class); intent.putExtra("user_id", 12345); startActivity(intent); finish(); } else { Toast.makeText(LoginActivity.this, "登录失败,请重试", Toast.LENGTH_SHORT).show(); } } } } ``` 在 XML 布局文件中,可以像下面这样创建登录界面的 UI 元素: ```xml <EditText android:id="@+id/username_edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="用户名" android:inputType="text" /> <EditText android:id="@+id/password_edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="密码" android:inputType="textPassword" /> <Button android:id="@+id/login_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登录" /> ``` 当用户点击“登录”按钮时,会触发 AsyncTask 的执行,并在 doInBackground() 方法中执行网络操作。如果登录成功,则会使用 Intent 跳转到主界面,并将用户 ID 作为参数传递。如果登录失败,则会显示一个简短的提示消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值