Android调用WebService登录接口

package jklc.gzznprojectjklc;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.MarshalBase64;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class LoginActivity extends Activity {
    public static SqliteDBHelper helper;
    public EditText txtUserName;
    public EditText txtUserPwd;
    public TextView txtIMSI, txtVersion;
    public Button btnLogin, btnRegister;
    public SQLiteDatabase db;
    public String userName;
    public static boolean flag = false;
    public ProgressDialog pd;
    public HashMap<String, Object> hashmap;
    public static ArrayList<HashMap<String, Object>> arrayList;
    public String _DepartId = "";
    public String _UserId = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.login);
        txtUserName = (EditText) findViewById(R.id.txtUserName);
        txtUserPwd = (EditText) findViewById(R.id.txtUserPwd);
        txtIMSI = (TextView) findViewById(R.id.txtIMSI);
        txtVersion = (TextView) findViewById(R.id.txtVersionInfo);
        btnRegister = (Button) findViewById(R.id.btnZhuce);
        btnRegister.setOnClickListener(listenerZhuce);
        txtUserName.setText("");
        txtUserPwd.setText("");
        txtVersion.setText("最新版本:" + _getVersionInfo());
        txtUserName.requestFocus();
        txtUserName.setCursorVisible(true);

        btnLogin = (Button) findViewById(R.id.btnLogin);
        btnLogin.setOnClickListener(listenerLogin);
        PhoneInfo info = new PhoneInfo(LoginActivity.this);
        String IMEI = info.getPhoneInfo();
        txtIMSI.setText(IMEI);
        ConfigureModel model = _GetConfigure();
        if (model.displayflag == null) {

        } else {
            btnRegister.setVisibility(View.GONE);
            if (isOpenNetWork()) {
                _GetVersionInfo();
            }
        }
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        Constant.displayWidth = displayMetrics.widthPixels;
        Constant.displayHeight = displayMetrics.heightPixels;
    }

    OnClickListener listenerZhuce = new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent it = new Intent();
            it.setClass(LoginActivity.this, ConfigureActivity.class);
            startActivity(it);
        }
    };

    public void _GetVersionInfo() {
        try {
            UpdateAppManager mUpdateManager = new UpdateAppManager(
                    LoginActivity.this);
            mUpdateManager.checkUpdate();
        } catch (Exception e) {
            ErrorMessageInfo._GetErrorMessage("LoginActivity", e.toString(),
                    getApplicationContext());
        }
    }

    public String _getVersionInfo() {
        PackageInfo info = null;
        PackageManager pm;
        pm = this.getPackageManager();
        try {
            info = pm.getPackageInfo(this.getPackageName(), 0);
        } catch (NameNotFoundException e) {
            ErrorMessageInfo._GetErrorMessage("LoginActivity", e.toString(),
                    getApplicationContext());
        }
        String version = info.versionName;
        return version;
    }

    OnClickListener listenerLogin = new OnClickListener() {
        @Override
        public void onClick(View v) {

            pd = ProgressDialog.show(LoginActivity.this, "提示", "正在登陆中...",
                    true, false);
            new Thread() {
                @Override
                public void run() {
                    LoginActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            _GetLogin();
                            handler.sendEmptyMessage(0);
                        }
                    });
                }
            }.start();
        }
    };

    @SuppressWarnings("static-access")
    public void _GetLogin() {
        ConfigureModel model = _GetConfigure();
        String ip = model.ipAddress;
        String port = model.port;
        if (ip == null || port == null) {
            ShowDialog("请注册服务器IP和端口号");
            return;
        }
        String url = "http://" + ip + ":" + port
                + "/WebServers/WLogincheck.asmx";
        String nameSpace = "http://tempuri.org/";
        String SOAP_ACTION = "http://tempuri.org/Authentication";
        String method = "Authentication";
        PhoneInfo info = new PhoneInfo(LoginActivity.this);
        String _LoginUserName = txtUserName.getText().toString();
        String userPwd = txtUserPwd.getText().toString();
        String IMEI = info.getPhoneInfo();
        SoapObject request = new SoapObject(nameSpace, method);
        request.addProperty("username", _LoginUserName);
        request.addProperty("pwd", userPwd);
        request.addProperty("IMEI", IMEI);
        AndroidHttpTransport transport = new AndroidHttpTransport(url);
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.bodyOut = request;
        (new MarshalBase64()).register(envelope);
        envelope.dotNet = true;
        try {
            if (isOpenNetWork()) {
                transport.call(SOAP_ACTION, envelope);
                if (envelope.getResponse() != null) {
                    if (_LoginUserName.equals("") || userPwd.equals("")) {
                        ShowDialog("用户名或者密码不能为空");
                    } else {
                        Object object = envelope.getResponse();
                        String str = object.toString();
                        String[] RealValue = null;
                        RealValue = str.split(",");
                        String result = RealValue[0].toString();
                        String message = RealValue[1].toString();
                        if (result.equals("failures")) {
                            ShowDialog(message);
                        } else {
                            MeasurationActivity.userId = RealValue[1]
                                    .toString();
                            HeadDownActivity.userid = RealValue[1].toString();
                            GroundDownActivity.userId = RealValue[1].toString();
                            SurroundingActivity.userId = RealValue[1]
                                    .toString();
                            MeasurationActivity.departId = RealValue[5]
                                    .toString();
                            WorningListActivity.userId = RealValue[1]
                                    .toString();
                            WorningListActivity.departId = RealValue[5]
                                    .toString();
                            WaringCountActivity.userId = RealValue[1]
                                    .toString();
                            SurroundingActivity.departID = RealValue[5]
                                    .toString();
                            HeadDownActivity.departId = RealValue[5].toString();
                            WarningToday.userId = RealValue[1].toString();
                            WarningToday.departId = RealValue[5].toString();
                            GroundDownActivity.departId = RealValue[5]
                                    .toString();
                            FunctionListActivity.userId = RealValue[1]
                                    .toString();
                            _DepartId = RealValue[5].toString();
                            _UserId = RealValue[1].toString();
                            ContentValues values = new ContentValues();
                            SimpleDateFormat fort = new SimpleDateFormat(
                                    "yyyy-MM-dd HH:mm:ss", Locale.getDefault());
                            Date curDate = new Date(System.currentTimeMillis());
                            String time = fort.format(curDate);
                            values.put("UserName", _LoginUserName);
                            values.put("UserPwd", userPwd);
                            values.put("PhoneIMEI", IMEI);
                            values.put("DateTime", time);
                            helper = new SqliteDBHelper(getApplicationContext());
                            db = helper.getReadableDatabase();
                            Cursor c = db.rawQuery("select * from Users", null);
                            if (c.getCount() == 0) {
                                helper.Insert(values, helper.User_Table);
                            }
                            _InsertUserLoginLog();
                            _SendLoginLog();
                            Intent intent = new Intent();
                            intent.setClass(LoginActivity.this,
                                    FunctionListActivity.class);
                            startActivity(intent);
                            LoginActivity.this.finish();
                            txtUserName.setText("");
                            txtUserPwd.setText("");
                            Toast.makeText(getApplicationContext(), "登录成功",
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            } else {
                try {
                    if (_LoginUserName.equals("") || userPwd.equals("")) {
                        ShowDialog("请输入用户名或者密码");
                    } else {
                        if (IsLogin(_LoginUserName, userPwd)) {
                            _InsertUserLoginLog();
                            Toast.makeText(getApplicationContext(), "本地登录成功",
                                    Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent();
                            intent.setClass(LoginActivity.this,
                                    FunctionListActivity.class);
                            startActivity(intent);
                            txtUserName.setText("");
                            txtUserPwd.setText("");
                        } else {
                            ShowDialog("用户没有找到,请注意大小写。");
                        }
                    }
                } catch (Exception e) {
                    ErrorMessageInfo._GetErrorMessage("LoginActivity",
                            e.toString(), getApplicationContext());
                }
            }
        } catch (Exception e) {
            ErrorMessageInfo._GetErrorMessage("LoginActivity", e.toString(),
                    getApplicationContext());
            Toast.makeText(getApplicationContext(), "网络或者服务器断开不能登录",
                    Toast.LENGTH_SHORT).show();
        }
    }

    public boolean IsLogin(String Name, String Pwd) {
        try {
            helper = new SqliteDBHelper(this);
            db = helper.getReadableDatabase();
            Cursor c = db.rawQuery(
                    "select * from Users where UserName=? and UserPwd=?",
                    new String[] { Name.toString(), Pwd.toString() });
            if (c.getCount() > 0) {
                c.close();
                return true;
            }
            return false;
        } catch (Exception e) {
            ErrorMessageInfo._GetErrorMessage("LoginActivity", e.toString(),
                    getApplicationContext());
        }
        return false;
    }

    private Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            pd.dismiss();
        }
    };

    private void ShowDialog(String message) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("提示");
        builder.setMessage(message);
        builder.setPositiveButton("确定", null);
        builder.create().show();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            AlertDialog isExit = new AlertDialog.Builder(this).create();
            isExit.setTitle("提示");
            isExit.setMessage("确定要退出系统吗?");
            isExit.setButton("确定", listener);
            isExit.setButton2("取消", listener);
            isExit.show();
        }
        return false;
    }

    DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            switch (which) {
            case AlertDialog.BUTTON_POSITIVE:
                _GetClose();
                break;
            case AlertDialog.BUTTON_NEGATIVE:
                break;
            default:
                break;
            }
        }
    };

    public void _GetClose() {
        try {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            android.os.Process.killProcess(android.os.Process.myPid());
        } catch (Exception e) {
            ErrorMessageInfo._GetErrorMessage("LoginActivity", e.toString(),
                    getApplicationContext());
        }
    }

    public ConfigureModel _GetConfigure() {
        ConfigureModel model = new ConfigureModel();
        try {
            helper = new SqliteDBHelper(getApplicationContext());
            db = helper.getReadableDatabase();
            Cursor c = db.rawQuery("select * from Server", null);
            while (c.moveToNext()) {
                model.id = c.getString(0);
                model.ipAddress = c.getString(1);
                model.port = c.getString(2);
                model.displayflag = c.getString(3);
            }
        } catch (Exception e) {
            ErrorMessageInfo._GetErrorMessage("LoginActivity", e.toString(),
                    getApplicationContext());
        }
        return model;
    }

    @SuppressWarnings("static-access")
    public void _InsertUserLoginLog() {
        try {
            String _LoginUserName = txtUserName.getText().toString();
            ContentValues values = new ContentValues();
            SimpleDateFormat fort = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                    Locale.getDefault());
            Date curDate = new Date(System.currentTimeMillis());
            String time = fort.format(curDate);
            values.put("UserName", _LoginUserName);
            values.put("LoginTime", time);
            values.put("State", 0);
            helper = new SqliteDBHelper(getApplicationContext());
            db = helper.getReadableDatabase();
            helper.Insert(values, helper.UserLogin_Log);
        } catch (Exception e) {
            ErrorMessageInfo._GetErrorMessage("LoginActivity", e.toString(),
                    getApplicationContext());
        }
    }

    public void _SendLoginLog() {
        try {
            ArrayList<HashMap<String, Object>> list = _GetLoginLogData();
            int count = list.size();
            for (int i = 0; i < count; i++) {
                String id = list.get(i).get("ID").toString();
                ConfigureModel model = _GetConfigure();
                String ip = model.ipAddress;
                String port = model.port;
                String url = "http://" + ip + ":" + port
                        + "/WebServers/yonghudenglu.asmx";
                String nameSpace = "http://tempuri.org/";
                String SOAP_ACTION = "http://tempuri.org/SetObject";
                String method = "SetObject";
                SoapObject request = new SoapObject(nameSpace, method);
                request.addProperty("DepartID", _DepartId);
                request.addProperty("UserName", hashmap.get("UserName")
                        .toString() == null ? "" : hashmap.get("UserName")
                        .toString());
                request.addProperty("BiaoDuan", "");
                request.addProperty("GongSi", "");
                request.addProperty("DengLuShiJian", hashmap.get("LoginTime")
                        .toString() == null ? "" : hashmap.get("LoginTime")
                        .toString());
                request.addProperty("XingMing", "");
                request.addProperty("UserID", _UserId);
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
                envelope.bodyOut = request;
                envelope.dotNet = true;
                AndroidHttpTransport transport = new AndroidHttpTransport(url);
                try {
                    if (isOpenNetWork()) {
                        transport.call(SOAP_ACTION, envelope);
                        if (envelope.getResponse() != null) {
                            Object object = envelope.getResponse();
                            String result = object.toString();
                            if (!result.equals("0")) {
                                helper = new SqliteDBHelper(this);
                                db = helper.getWritableDatabase();
                                String sql = "update LoginLog set State = 1 where ID='"
                                        + id + "'";
                                db.execSQL(sql);
                                Toast.makeText(getApplicationContext(), "上传成功",
                                        Toast.LENGTH_LONG).show();
                            } else {
                                Toast.makeText(getApplicationContext(), "上传失败",
                                        Toast.LENGTH_LONG).show();
                            }
                        }
                    }
                } catch (Exception e) {
                    ErrorMessageInfo._GetErrorMessage("LoginActivity",
                            e.toString(), getApplicationContext());
                }
            }
        } catch (Exception e) {
            ErrorMessageInfo._GetErrorMessage("LoginActivity", e.toString(),
                    getApplicationContext());
        }
    }

    public ArrayList<HashMap<String, Object>> _GetLoginLogData() {
        arrayList = new ArrayList<HashMap<String, Object>>();
        try {
            helper = new SqliteDBHelper(this);
            SQLiteDatabase mdb = helper.getReadableDatabase();
            StringBuilder _sql = new StringBuilder();
            _sql.append(" select * from LoginLog where State = 0 ");
            Cursor c = mdb.rawQuery(_sql.toString(), null);
            while (c.moveToNext()) {
                hashmap = new HashMap<String, Object>();
                hashmap.put("ID", c.getString(0));
                hashmap.put("UserName", c.getString(1));
                hashmap.put("LoginTime", c.getString(2));
                hashmap.put("State", c.getString(3));
                arrayList.add(hashmap);
            }
        } catch (Exception e) {
            ErrorMessageInfo._GetErrorMessage("LoginActivity", e.toString(),
                    getApplicationContext());
        }
        return arrayList;
    }

    // 网络监测
    private boolean isOpenNetWork() {
        ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connManager.getActiveNetworkInfo() != null) {
            return connManager.getActiveNetworkInfo().isAvailable();
        }
        return false;
    }
}
原文地址:https://www.cnblogs.com/xiaoyao095/p/4520079.html