• android 登录和设置IP/端口功能


    本人第一个Android开发功能:登录以及设置IP/端口。

    本人是j2ee开发工程师,所以这个可能有一些处理不太完善的地方,欢迎评论在下面,我会认真改进的。

    首先是配置strings.xml文件添加用到的参数:res/values/strings.xml

    <resources>
        <!-- 登录 -->
        <string name="login_name">帐号:</string>
        <string name="login_pwd">密码:</string>
        <string name="remember_pwd">记住密码</string>
        <string name="auto_login">自动登录</string>
        <string name="login">登录</string>
        <string name="setting">设置</string>
        <string name="ip">IP:</string>
        <string name="port">端口:</string>
        <string name="is_logining_in">正在登录...</string>
        <string name="login_http_error">网络异常,请重新登录</string>
    </resources>

    其次是布局文件:res/layout/activity_login.xml(背景图片不提供)

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" 
        android:background="@drawable/login_background">
        
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="horizontal"
            android:layout_weight="1">
            
        </LinearLayout>
        
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:layout_weight="1">
        
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="center">
        
                <TextView android:textSize="8pt" 
                    android:id="@+id/tv_login_name" 
                    android:text="@string/login_name"
                    android:layout_width="wrap_content" 
                    android:layout_height="wrap_content"
                    android:textAppearance="@style/AppTheme"
                    android:textColor="@color/black"/>
                    
                    <EditText android:id="@+id/et_login_name"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:inputType="text"
                    android:singleLine="true"/>
            </LinearLayout>
                  
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="center">
                    
                    <TextView android:textSize="8pt" 
                    android:id="@+id/tv_password" 
                    android:text="@string/login_pwd"
                    android:layout_width="wrap_content" 
                    android:layout_height="wrap_content"
                    android:textColor="@color/black"/>
                  
                <EditText android:id="@+id/et_password"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:inputType="textPassword"
                    android:singleLine="true"/>
            </LinearLayout>
            
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center">    
                
                <CheckBox android:id="@+id/cb_remember_pwd"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/remember_pwd"
                    android:textColor="@color/black" />
            
                <CheckBox android:id="@+id/cb_auto_login"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/auto_login"
                    android:textColor="@color/black" />
            </LinearLayout>
        
        </LinearLayout>
        
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="horizontal"
            android:layout_weight="1"
            android:gravity="center">
        
            <Button android:text="@string/login" 
                android:textSize="9pt" 
                android:id="@+id/btn_login" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"/>
             
            <Button android:text="@string/cancel" 
                android:textSize="9pt" 
                android:id="@+id/btn_cancel" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"/>
            
            <Button android:text="@string/setting" 
                android:textSize="9pt" 
                android:id="@+id/btn_setting" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"/>
        
        </LinearLayout>    
    </LinearLayout>

    再来是主要的activity:LoginActivity.java

    package com.chinawiserv.itsm.android;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Properties;
    
    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import com.chinawiserv.itsm.android.app.Itsm;
    import com.chinawiserv.itsm.android.util.HttpUtil;
    import com.chinawiserv.itsm.android.util.PropertiesUtil;
    
    import android.app.AlertDialog;
    import android.app.ProgressDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Looper;
    import android.os.Message;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    import android.widget.EditText;
    import android.widget.Toast;
    import android.widget.CompoundButton.OnCheckedChangeListener;
    
    public class LoginActivity extends BaseActivity implements OnClickListener {
    
        private EditText etLoginName, etPassword;
        private Button btnLogin, btnCancel, btnSetting;
        private CheckBox cbRememberPwd, cbAutoLogin;
        private String loginNameValue, passwordValue;
        private Bundle loginBundle = new Bundle();// 传递数据
        private Properties properties;// 保存登录配置信息
        private ProgressDialog pd;// 访问接口等待进度条
        private EditText et_host, et_port;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
    
            findViews();
            setListeners();
    
            // 判断记住密码多选框的状态
            if ("true".equals(properties.getProperty("isRememberPwd"))) {
                cbRememberPwd.setChecked(true);
                etLoginName.setText(properties.getProperty("loginName"));
                etPassword.setText(properties.getProperty("pwd"));
                // 判断自动登陆多选框状态
                if ("true".equals(properties.getProperty("isAutoLogin"))) {
                    // 设置默认是自动登录状态
                    cbAutoLogin.setChecked(true);
                    // 跳转界面
                    login();
                }
            }
            // 监听记住密码多选框按钮事件
            cbRememberPwd.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {
                    if (cbRememberPwd.isChecked()) {// 记住密码
                        properties.setProperty("isRememberPwd", "true");
                    } else {// 取消记住密码同时取消记住自动登录
                        cbAutoLogin.setChecked(false);
                        properties.setProperty("isRememberPwd", "false");
                        properties.setProperty("isAutoLogin", "false");
                    }
                }
            });
            // 监听自动登录多选框事件
            cbAutoLogin.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (cbAutoLogin.isChecked()) {// 自动登录同时记住密码
                        cbRememberPwd.setChecked(true);
                        properties.setProperty("isRememberPwd", "true");
                        properties.setProperty("isAutoLogin", "true");
                    } else {// 取消自动登录
                        properties.setProperty("isAutoLogin", "false");
                    }
                }
            });
        }
    
        private void findViews() {
            properties = PropertiesUtil.loadConfig(LoginActivity.this);// 加载资源信息
            etLoginName = (EditText) findViewById(R.id.et_login_name);
            etPassword = (EditText) findViewById(R.id.et_password);
            cbRememberPwd = (CheckBox) findViewById(R.id.cb_remember_pwd);
            cbAutoLogin = (CheckBox) findViewById(R.id.cb_auto_login);
            btnLogin = (Button) findViewById(R.id.btn_login);
            btnCancel = (Button) findViewById(R.id.btn_cancel);
            btnSetting = (Button) findViewById(R.id.btn_setting);
        }
    
        private void setListeners() {
            btnLogin.setOnClickListener(LoginActivity.this);
            btnCancel.setOnClickListener(LoginActivity.this);
            btnSetting.setOnClickListener(LoginActivity.this);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.activity_login, menu);
            return true;
        }
    
        @Override
        public void onClick(View v) {
            int id = v.getId();
            switch (id) {
            case R.id.btn_login:// 监听登录按钮事件
                Itsm.HOST = properties.getProperty("userHost");
                Itsm.PORT = properties.getProperty("userPort");
                if (Itsm.HOST == null || "".equals(Itsm.HOST) || Itsm.PORT == null || "".equals(Itsm.PORT)) {
                    Toast.makeText(LoginActivity.this, R.string.ipAndPortIsNull, Toast.LENGTH_LONG).show();
                } else {
                    login();
                }
                break;
            case R.id.btn_cancel:// 监听取消按钮事件
                finish();
                break;
            case R.id.btn_setting:// 监听设置按钮事件
                showAlertDialog();
                break;
            default:
                break;
            }
        }
    
        /** 弹出对话框 */
        public void showAlertDialog() {
            LayoutInflater inflater = getLayoutInflater();
            View layout = inflater.inflate(R.layout.activity_config,
                    (ViewGroup) findViewById(R.id.dialog));
            et_host = (EditText) layout.findViewById(R.id.et_host);
            et_port = (EditText) layout.findViewById(R.id.et_port);
            String userHost = properties.getProperty("userHost");
            String userPort = properties.getProperty("userPort");
            if (userHost != null && !"".equals(userHost) && userPort != null && !"".equals(userPort)) {
                et_host.setText(userHost.substring(7));
                et_port.setText(userPort);
            }
            new AlertDialog.Builder(this).setTitle("设置").setView(layout).setPositiveButton("确定", setSureDialogListener()).setNegativeButton("取消", setCancelDialogListener()).show();
        }
    
        /** 设置弹出框取消事件 */
        public android.content.DialogInterface.OnClickListener setCancelDialogListener() {
            return new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            };
        }
    
        /** 设置弹出框确定事件 */
        public android.content.DialogInterface.OnClickListener setSureDialogListener() {
            return new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    try {
                        CharSequence hostValue = et_host.getText();
                        CharSequence portValue = et_port.getText();
                        if (hostValue != null && portValue != null) {
                            Itsm.HOST = "http://" + hostValue.toString();
                            Itsm.PORT = portValue.toString();
                            properties.setProperty("userHost", Itsm.HOST);
                            properties.setProperty("userPort", Itsm.PORT);
                            PropertiesUtil.saveConfig(LoginActivity.this, properties);
                            dialog.dismiss();
                        } else {
                            Toast.makeText(LoginActivity.this, getString(R.string.ipAndPortIsNull), Toast.LENGTH_LONG).show();
                        }
                    } catch (NumberFormatException e) {
                        e.printStackTrace();
                    }
                }
            };
        }
    
        Handler handler = new Handler() {
            @Override
            public void handleMessage(final Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                case 0:
                    Bundle errorBundle = (Bundle) msg.obj;
                    int error = errorBundle.getInt("error");
                    String errorMsg = errorBundle.getString("errorMsg");
                    Toast.makeText(LoginActivity.this, "错误编号:" + error + "
    错误信息:" + errorMsg, Toast.LENGTH_LONG).show();
                    break;
                case 1:
                    Bundle successBundle = (Bundle) msg.obj;
                    Intent toMainActivityIntent = new Intent();
                    toMainActivityIntent.putExtras(successBundle);
                    toMainActivityIntent.setClass(LoginActivity.this, IndexActivity.class);
                    startActivity(toMainActivityIntent);
                    break;
                case -1:
                    Toast.makeText(LoginActivity.this,getText(R.string.login_http_error), Toast.LENGTH_LONG).show();
                    break;
                default:
                    break;
                }
            }
        };
    
        private void login() {
            loginNameValue = etLoginName.getText().toString();
            passwordValue = etPassword.getText().toString();
            if (loginNameValue == null || "".equals(loginNameValue)) {
                Toast.makeText(LoginActivity.this, "请先输入帐号!", Toast.LENGTH_LONG).show();
            } else if (passwordValue == null || "".equals(passwordValue)) {
                Toast.makeText(LoginActivity.this, "请先输入密码!", Toast.LENGTH_LONG).show();
            } else {
                final String loginInUrl = Itsm.HOST + Itsm.COLON + Itsm.PORT + Itsm.LOGIN_IN;
                pd = ProgressDialog.show(LoginActivity.this, "", getString(R.string.is_logining_in));
                new Thread() {
                    public void run() {
                        Looper.prepare();
                        List<NameValuePair> params = new ArrayList<NameValuePair>();
                        params.add(new BasicNameValuePair("loginName", loginNameValue));
                        params.add(new BasicNameValuePair("pwd", passwordValue));
                        Message msg = new Message();
                        try {
                            String loginResult = HttpUtil.doPost(params, loginInUrl);
                            JSONObject loginJson = new JSONObject(loginResult);
                            boolean flag = loginJson.getBoolean("flag");
                            if (!flag) {
                                int error = loginJson.getInt("error");
                                String errorMsg = loginJson.getString("errorMsg");
                                loginBundle.putInt("error", error);
                                loginBundle.putString("errorMsg", errorMsg);
                                msg.what = 0;
                            } else {
                                /** 登录成功判断是否记住密码和自动登录 */
                                if (cbRememberPwd.isChecked()) {
                                    properties.setProperty("isRememberPwd", "true");
                                    properties.setProperty("loginName", loginNameValue);
                                    properties.setProperty("pwd", passwordValue);
                                }
                                if (cbAutoLogin.isChecked()) {
                                    properties.setProperty("isAutoLogin", "true");
                                }
                                PropertiesUtil.saveConfig(LoginActivity.this,properties);// 登录成功才保存资源信息
                                msg.what = 1;
                                String userId = loginJson.getString("userId");
                                String userName = loginJson.getString("userName");
                                String orgId = loginJson.getString("orgId");
                                JSONArray roleJson = loginJson.getJSONArray("roles");
                                Itsm.USER_ID = userId;
                                Itsm.ORG_ID = orgId;
                                loginBundle.putString("userId", userId);
                                loginBundle.putString("userName", userName);
                                loginBundle.putString("orgId", orgId);
                                loginBundle.putString("roleJson", roleJson.toString());
                            }
                            msg.obj = loginBundle;
                            handler.sendMessage(msg);
                        } catch (JSONException e) {
                            msg.what = -1;
                            handler.sendMessage(msg);
                            e.printStackTrace();
                        } finally {
                            pd.dismiss();
                            Looper.loop();
                        }
                    }
                }.start();
            }
        }
    
    }

    其中自定义的:HttpUtil.java

    package com.chinawiserv.itsm.android.util;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.List;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.params.HttpConnectionParams;
    import org.apache.http.params.HttpParams;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;
    
    import android.util.Log;
    
    import com.chinawiserv.itsm.android.app.Itsm;
    
    public class HttpUtil {
        
        public static String doPost(List<NameValuePair> params, String url) {
            HttpPost post = new HttpPost(url);
            String str = "";
            Log.d(Itsm.TAG, "调用post请求方法,请求接口为:" + url);
            HttpClient httpClient = new DefaultHttpClient();
            HttpParams params1 = httpClient.getParams();
            HttpConnectionParams.setConnectionTimeout(params1, 10000);
            HttpConnectionParams.setSoTimeout(params1, 15000);
            try {
                post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
    
                HttpResponse response = httpClient.execute(post);
                Log.d(Itsm.TAG, "状态:" + response.getStatusLine().getStatusCode());
                if (response.getStatusLine().getStatusCode() == 200) {
                    str = EntityUtils.toString(response.getEntity(), "UTF-8");
                    Log.d(Itsm.TAG, "结果:" + str);
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                return Itsm.HTTP_ERROR;
            } catch (ClientProtocolException e) {
                e.printStackTrace();
                return Itsm.HTTP_ERROR;
            } catch (IOException e) {
                e.printStackTrace();
                return Itsm.HTTP_ERROR;
            }
            return str;
        }
    
    }

    至于Itsm,其中只是定义了一些参数,可以声明在当前的LoginActivity里面:

    public static final String HTTP_ERROR = "-1";//访问链接错误
    public static String HOST = "http://192.168.1.157";
    public static String COLON = ":";
    public static String PORT = "8090";
    public static final String LOGIN_IN = "/itsm/http/loginMobLoginResultAction.action";//接口链接

    这个接口里面只是一个简单的登录功能,就不贴出来了。

  • 相关阅读:
    net core3.1 + electron 9.31.2 项目初始化
    DEV Express控件VScorllBar控件使用
    背包系统学习笔(tu)记(cao)
    C#应该掌握的一些东西
    服务器之间数据库拷贝
    photoshop AdobeCS6分享
    Random的实现原理
    C#利用System.Net发送邮件(带 抄送、密送、附件、html格式的邮件)
    jQuery validate验证控件remote缓存bug
    litrpa1.4版本正式发布了
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6427699.html
Copyright © 2020-2023  润新知