Android程序与服务器交互(二)

在公司一个项目中用到了这样一种网络请求方式,在此记录学习。
1.java代码


/**
 * 登录
 */
public class LogInActivity extends BaseActivity implements OnClickListener {
    private TakeTimeAsyncTask tta;
    private UIHandler handler;

    // 定义控件
    private EditText inputAccout;
    private EditText inputPassword;
    private Button login;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_login);
        initView();
    }

    /**
     * 初始化
     */
    private void initView() {
        inputAccout = (EditText) findViewById(R.id.et_accout);
        inputPassword = (EditText) findViewById(R.id.et_password);
        login = (Button) findViewById(R.id.bt_login);
        login.setOnClickListener(this);
        handler = new UIHandler();

        // 点击软键盘done按钮执行登录功能
        inputPassword
                .setOnEditorActionListener(new EditText.OnEditorActionListener() {
                    @Override
                    public boolean onEditorAction(TextView v, int actionId,
                            KeyEvent event) {
                        if (actionId == EditorInfo.IME_ACTION_DONE) {
                            login();
                        }
                        return false;
                    }
                });
    }

    /**
     * 登录
     */
    private void login() {

        if (inputAccout.getText().toString().trim().equals("")
                && inputPassword.getText().toString().trim().equals("")) {
            inputAccout.requestFocus();
            Toast.makeText(LogInActivity.this, "请输入账号和密码", Toast.LENGTH_SHORT)
                    .show();
        } else if (inputAccout.getText().toString().trim().equals("")) {
            inputAccout.requestFocus();
            Toast.makeText(LogInActivity.this, "请输入账号", Toast.LENGTH_SHORT)
                    .show();
        } else if (inputPassword.getText().toString().trim().equals("")) {
            inputPassword.requestFocus();
            Toast.makeText(LogInActivity.this, "请输入密码", Toast.LENGTH_SHORT)
                    .show();
        } else {
            Map<String, String> map = new HashMap<String, String>();

            map.put("gongHao", inputAccout.getText().toString());
            map.put("miMa", Md5Utils.MD5(inputPassword.getText().toString()));
            map.put("url", Contants.LOGIN);
            tta = new TakeTimeAsyncTask(LogInActivity.this, handler,
                    Contants.SUCCEED_LOGIN, 1);
            tta.execute(map);
        }

    }

    public class UIHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case Contants.SUCCEED_LOGIN:

                if (!"".equals(msg.obj.toString())) {

                    if ((msg.obj.toString()).equals("1")) {
                        inputAccout.setText("");
                        inputPassword.setText("");
                        inputAccout.requestFocus();
                        Toast.makeText(LogInActivity.this, "账号错误",
                                Toast.LENGTH_SHORT).show();

                    }
                    if ((msg.obj.toString()).equals("2")) {
                        inputPassword.setText("");
                        inputPassword.requestFocus();
                        Toast.makeText(LogInActivity.this, "密码错误",
                                Toast.LENGTH_SHORT).show();
                    }

                    // 解析JSON数据
                    try {

                        JSONObject jsonObject = new JSONObject(
                                msg.obj.toString());
                        Map<String, String> mapLogin = new HashMap<String, String>();
                        mapLogin.put("sysID", jsonObject.getString("sysID"));
                        mapLogin.put("gongHao", jsonObject.getString("gongHao"));
                        mapLogin.put("quanXianSysID",
                                jsonObject.getString("quanXianSysID"));
                        Intent intent = new Intent(LogInActivity.this,
                                SidebarActivity.class);
                        startActivity(intent);
                        finish();

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                } else {
                    System.out.println(msg.obj.toString());
                }
                break;
            default:
                Toast.makeText(LogInActivity.this, "网络异常", Toast.LENGTH_SHORT)
                        .show();
                break;
            }
        }
    }

    /**
     * 重载方法
     */
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.bt_login:

            login();
            break;
        }
    }

    /**
     * 点击返回按钮,程序后台运行
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            moveTaskToBack(false);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

2.TakeTimeAsyncTask.java

public class TakeTimeAsyncTask extends AsyncTask<Object, Object, Object> {
    public final static String CONEXCEPTION = "网络异常,请重新操作";
    private Context context;
    private Handler handler;
    private ServerDateUtil sdu = null;
    private int resultwhat = 0;
    private CustomProgressDialog dialog = null;
    private int dialogflag = 0;
    private TimeCount time;

    public TakeTimeAsyncTask(Context con, Handler handler, int resultwhat,
            int dialogflag) {
        context = con;
        this.handler = handler;
        this.resultwhat = resultwhat;
        dialog = CustomProgressDialog.getCustomProgressDialog(context,
                R.style.CustomProgressDialog);
        this.dialogflag = dialogflag;
    }

    @Override
    protected void onPreExecute() {

        if (dialogflag == 1 && dialog != null) {
            dialog.showDailog("");
            time = new TimeCount(20000, 500);
            time.start();
        }
    }

    @Override
    protected Object doInBackground(Object... params) {
        if (NetworkDetector.detect(context)) {
            // 请求服务器获取更新
            sdu = ServerDateUtil.getInstance(context, handler);
            return sdu.getServer(resultwhat,
                    (HashMap<String, String>) params[0]);
        } else {
            Message message = handler.obtainMessage(Contants.DEFEATED);
            message.obj = resultwhat;
            message.sendToTarget();
            dialog.stopDailog();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Object result) {
        int w = 0;
        if (result == null || result.toString().equals(CONEXCEPTION)) {
            w = Contants.DEFEATED;
        } else {
            w = resultwhat;
        }
        Message message = handler.obtainMessage(w);
        message.obj = result;
        message.sendToTarget();
        dialog.stopDailog();
    }

    class TimeCount extends CountDownTimer {
        public TimeCount(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onTick(long arg0) {
            time.cancel();
        }

        @Override
        public void onFinish() {
            dialog.stopDailog();
        }
    }
}

3.ServerDateUtil.java

/**
 *  执行网络请求
 *
 */
public class ServerDateUtil {
    public final static String CONEXCEPTION = "网络异常,请重新操作";
    private static ServerDateUtil fetcher;
    private final static int TIMEOUT = 20000;
    private static HttpPost req;
    private static HttpResponse rep;
    private static DefaultHttpClient client;
    private static List<NameValuePair> params;

    public static ServerDateUtil getInstance(Context con, Handler handler) {
        if (fetcher == null) {
            fetcher = new ServerDateUtil();
        }
        if (client == null) {
            BasicHttpParams params = new BasicHttpParams();
            SchemeRegistry schemeRegistry = new SchemeRegistry();
            schemeRegistry.register(new Scheme("http", PlainSocketFactory
                    .getSocketFactory(), 80));
            final SSLSocketFactory sslSocketFactory = SSLSocketFactory
                    .getSocketFactory();
            schemeRegistry.register(new Scheme("https", sslSocketFactory, 443));
            ClientConnectionManager cm = new ThreadSafeClientConnManager(
                    params, schemeRegistry);
            client = new DefaultHttpClient(cm, params);
            final HttpParams param = client.getParams();
            HttpConnectionParams.setConnectionTimeout(param, TIMEOUT);
            HttpConnectionParams.setSoTimeout(param, TIMEOUT);
            ConnManagerParams.setTimeout(param, TIMEOUT);
        }
        return fetcher;
    }

    /**
     * 从服务器取数据列表 参数第一个为URL
     * 
     * @return
     */
    public String getServer(int what, HashMap<String, String> param) {
        String url = param.get("url");
        param.remove("url");
        Set<String> set = param.keySet();
        Object[] item = set.toArray();
        params = new ArrayList<NameValuePair>();
        for (int i = 0; i < item.length; i++) {
            String name = (String) item[i];
            String value = (String) param.get(name);
            params.add(new BasicNameValuePair(name, value));
        }
        try {
            req = new HttpPost(url);
            HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
            req.setHeader(entity.getContentType());
            req.setEntity(entity); 
            rep = client.execute(req);
            if (rep.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                return EntityUtils.toString(rep.getEntity());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return CONEXCEPTION;
    }

}

4.NetworkDetector..java

public class NetworkDetector {
    public static boolean detect(Context context) {

        ConnectivityManager manager = (ConnectivityManager) context
                .getApplicationContext().getSystemService(
                        Context.CONNECTIVITY_SERVICE);
        if (manager == null) {
            return false;
        }
        NetworkInfo networkinfo = manager.getActiveNetworkInfo();

        if (networkinfo == null || !networkinfo.isAvailable()) {
            return false;
        }
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值