android网络通信之HttpUrlConnection

下面例子为使用HttpUrlConnection的一个登录服务器的小例子。

package com.liang.logindemo;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class MainActivity extends ActionBarActivity {
    private EditText et_userName;
    private EditText et_password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_userName= (EditText) findViewById(R.id.et_userName);
        et_password= (EditText) findViewById(R.id.et_password);
    }

    public void login(View view) {
        String str=et_userName.getText().toString();
        try {
            str=URLEncoder.encode(str,"utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        final String userName=str;

        final String password=et_password.getText().toString();

        //在子线程中访问网络
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //final boolean isSuccess =loginByPost(userName,password);
                    final boolean isSuccess = loginByGet(userName,password);

                    //使用此方法可不使用Handler通知主线程,方法内所做操作由主线程完成
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if(isSuccess){
                                Toast.makeText(MainActivity.this,"成功!!!",Toast.LENGTH_SHORT).show();
                            }else{
                                Toast.makeText(MainActivity.this,"失败!!!",Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    /**
     * HttpUrlConnection通过GET请求方式访问服务器
     * @param userName,password
     * @return
     * @throws Exception
     */
    private Boolean loginByGet(String userName,String password) throws Exception{
        //服务器地址
        String url="http://192.168.1.58:8080/Login/servlet/Login";
        String data="?userName="+userName + "&password="+password;
        HttpURLConnection conn=null;
        InputStream is=null;
        BufferedReader reader=null;
        try {
            //定义一个URL
            URL murl=new URL(url+data);
            //打开连接获得HttpURLConnection
            conn = (HttpURLConnection) murl.openConnection();
            //设置请求方式
            conn.setRequestMethod("GET");
            //设置访问网络超时时间,超出时间会抛出异常
            conn.setConnectTimeout(5 * 1000);
            //设置读取超时时间
            conn.setReadTimeout(3 * 1000);
            //连接网络
            conn.connect();
            //获得返回的状态码
            int code = conn.getResponseCode();
            //200为正常响应
            if(code==200){
                //获得响应内容的输入流
                is = conn.getInputStream();
                //读取内容
                reader=new BufferedReader(new InputStreamReader(is));
                String state = reader.readLine();
                if("SUCCESS".equals(state)){
                    return true;
                }else{
                    return false;
                }
            }
        } catch (Exception e) {
            throw e;
        } finally {
            if(reader!=null){
                reader.close();
            }
            if(is!=null){
                is.close();
            }
            //关闭连接
            conn.disconnect();
        }
        return false;
    }

    /**
     *HttpUrlConnection通过POST请求方式访问服务器
     * @param userName
     * @param password
     * @return
     * @throws Exception
     */
    boolean loginByPost(String userName,String password) throws Exception{
        String url="http://192.168.1.58:8080/Login/servlet/Login";
        HttpURLConnection conn=null;
        InputStream is=null;
        BufferedReader reader=null;
        OutputStream outputStream;
        String data="userName="+userName+"&password="+password;
        try {
            URL murl=new URL(url);
            conn = (HttpURLConnection) murl.openConnection();
            conn.setRequestMethod("POST");
            conn.setConnectTimeout(5 * 1000);
            conn.setReadTimeout(3 * 1000);
            //设置允许打开输出流,默认为不打开
            conn.setDoOutput(true);
            //设置请求头信息,可设置多个
            //conn.setRequestProperty(key,value);

            //获得输出流,用于往服务器写入数据
            outputStream = conn.getOutputStream();
            outputStream.write(data.getBytes());
            outputStream.flush();
            outputStream.close();
            conn.connect();
            int code = conn.getResponseCode();
            if(code==200){
                is = conn.getInputStream();
                reader=new BufferedReader(new InputStreamReader(is));
                String state = reader.readLine();
                if("SUCCESS".equals(state)){
                    return true;
                }else{
                    return false;
                }
            }
        } catch (Exception e) {
            throw e;
        } finally {
            if(reader!=null){
                reader.close();
            }
            if(is!=null){
                is.close();
            }
            conn.disconnect();
        }
        return false;

    }
}

布局两个输入框一个提交按钮,比较简单,就不列出了。

注意在清单文件中添加网络访问权限

时间: 2024-10-13 16:26:30

android网络通信之HttpUrlConnection的相关文章

详细讲解Android的网络通信(HttpUrlConnection和HttpClient)

前言,Android的网络通信的方式有两种:使用Socket或者HTTP,今天这一篇我们详细讲解使用HTTP实现的网络通信,HTTP又包括两种方式编程方式: (1)HttpUrlConnection: (2)HttpClient: 好了,我们直接进行讲解,当然之前也会有一部分有关Android网络通信的其他知识,我们也应该了解. 一.获取网络状态的方法 (1)MainActivity.java中的关键代码 1 2 3 4 5 6 7 8 //网络管理类,可以判断是否能上网,以及网络类型     

【转】Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Go

Android网络通信的基本实现

似乎很久没有写博客了,今天看了无意间看了下半年前写的代码,设计似乎很有局限性,但基本的通信也算是实现了. 不知道以后看到现在写的代码会不会也会有这样的想法呢? 进入正题,android网络通信的基本实现的有两种方式,一种是通过HttpClient来实现,一种是通过HttpURLConnection来实现. 直接上代码: 首先是一个抽象的http类 /** * 抽象的Http * @author Jenly * @date 2014-8-7 * */ public abstract class A

android中的HttpUrlConnection的使用之一

在我们之前学习Java的网络编程当中,我们已经见过HttpUrlConnection类的使用.HttpUrlConnect在Java是一个支持http特定的功能一个类,在许多的网络编程经常使用到它.今天我在这里记录的是android中使用HttpUrlConnection,之前我还学过使用异步加载来加载一个网站,它使用的原理同样是多线程,但是它使用的是用json来解析一个网站,而不是直接使用域名也就是网址来解析一个网站,而将要介绍的HttpUrlConnection是使用域名来解析一个网站的,当

Android端通过HttpURLConnection上传文件到服务器

一:实现原理 最近在做Android客户端的应用开发,涉及到要把图片上传到后台服务器中,自己选择了做Spring3 MVC HTTP API作为后台上传接口,android客户端我选择用HttpURLConnection来通过form提交文件数据实现上传功能,本来想网上搜搜拷贝一下改改代码就好啦,发现根本没有现成的例子,多数的例子都是基于HttpClient的或者是基于Base64编码以后作为字符串来传输图像数据,于是我不得不自己动手,参考了网上一些资料,最终实现基于HttpURLConnect

Android网络通信Volley框架源码浅析(三)

尊重原创 http://write.blog.csdn.net/postedit/26002961 通过前面浅析(一)和浅析(二)的分析,相信大家对于Volley有了初步的认识,但是如果想更深入的理解,还需要靠大家多多看源码. 这篇文章中我们主要来研究一下使用Volley框架请求大量图片的原理,在Android的应用中,通过http请求获取的数据主要有三类: 1.json 2.xml 3.Image 其中json和xml的获取其实原理很简单,使用Volley获取感觉有点大财小用了,了解Volle

android中的HttpURLConnection和HttpClient实现app与pc数据交互

自学android的这几天很辛苦,但是很满足,因为每当学到一点点知识点都会觉得很开心,觉得今天是特别有意义的,可能这个就是一种莫名的热爱吧. 下面来说说今天学习的HttpURLConnection和HttpClient的区别吧,其实这2种都能进行客户端和服务器的数据交互,只是HttpClient封装的更完全. 先看下案例吧 第一种HttpURLConnection访问服务器: 客服端代码: package com.example.demo01; import java.io.IOExceptio

Android网络通信库Volley简介

1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.这是Volley名称的由来: a burst or emission of many things or a large amount at

Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在 这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于 AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的