android通信HttpClient

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

package com.liang.logindemo;

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

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

public class MainActivity3 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(MainActivity3.this,"成功了!!!",Toast.LENGTH_SHORT).show();
                            }else{
                                Toast.makeText(MainActivity3.this,"失败了!!!",Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    /**
     * HttpClient通过GET请求方式访问服务器
     * @param userName,password
     * @return
     * @throws Exception
     */
    private Boolean loginByGet(String userName,String password) throws Exception{
        //服务器地址
        String url="http://192.168.1.140:8080/Login/servlet/Login";
        String data="?userName="+userName + "&password="+password;
        HttpClient client=null;

        //定义一个客户端
        client = new DefaultHttpClient();
        //定义一个get请求
        HttpGet get = new HttpGet(url+data);
        //执行get请求,获得响应对象
        HttpResponse response = client.execute(get);
        //获得响应状态码
        int code = response.getStatusLine().getStatusCode();
        //返回结果
        if(code==200) {
            //获得响应内容
            InputStream is = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String text = reader.readLine();
            reader.close();
            is.close();
            return "SUCCESS".equals(text) ? true : false;
        }
        if(client!=null){
            //关闭连接
            client.getConnectionManager().shutdown();
        }
        return false;
    }

    /**
     *HttpClient通过POST请求方式访问服务器
     * @param userName
     * @param password
     * @return
     * @throws Exception
     */
    boolean loginByPost(String userName,String password) throws Exception{
        //服务器地址
        String url="http://192.168.1.140:8080/Login/servlet/Login";
        HttpClient client=null;

        //定义一个客户端
        client = new DefaultHttpClient();
        //定义一个Post请求
        HttpPost post = new HttpPost(url);
        //设置请求数据
        List<NameValuePair> list = new ArrayList<NameValuePair>();
        list.add(new BasicNameValuePair("userName",userName));
        list.add(new BasicNameValuePair("password",password));
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list);
        post.setEntity(entity);
        //执行get请求,获得响应对象
        HttpResponse response = client.execute(post);
        //获得响应状态码
        int code = response.getStatusLine().getStatusCode();
        //返回结果
        if(code==200) {
            //获得响应内容
            InputStream is = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String text = reader.readLine();
            reader.close();
            is.close();
            return "SUCCESS".equals(text) ? true : false;
        }
        if(client!=null){
            //关闭连接
            client.getConnectionManager().shutdown();
        }
        return false;

    }
}

需要清单文件中添加网络访问权限

时间: 2024-11-06 03:39:22

android通信HttpClient的相关文章

android通过httpClient请求获取JSON数据并且解析

android通过httpClient请求获取JSON数据并且解析:http://www.cnblogs.com/gzggyy/archive/2013/05/08/3066288.html Android--使用Http向服务器发送请求并取得返回结果,下载图片:http://www.2cto.com/kf/201307/229489.html Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据):http://blog.csdn.net/he

Android使用HttpClient下载图片

在前一章中讲的是Android使用HttpURLConnection下载图片,这一章使用HttpClient下载图片 HttpURLConnection与HttpClient的区别: HttpClient是个很不错的开源框架(org.appache.http),封装了访问http的请求头,参数,内容体,响应等等,使用起来更方面更强大. HttpURLConnection是java的标准类,可以实现简单的基于URL请求.响应功能,什么都没封装,用起来太原始,比如重访问的自定义,以及一些高级功能等.

Android 实现 HttpClient 请求Https

如题,默认下,HttpClient是不能请求Https的,需要自己获取 [java] view plaincopy private static final int SET_CONNECTION_TIMEOUT = 5 * 1000; private static final int SET_SOCKET_TIMEOUT = 20 * 1000; public static HttpClient getNewHttpClient() { try { KeyStore trustStore = K

Android使用HttpClient实现文件上传到PHP服务器,并监控进度条

上传 服务器端PHP 代码如下 : <?php $target_path = "./tmp/";//接收文件目录 $target_path = $target_path.($_FILES['file']['name']); $target_path = iconv("UTF-8","gb2312", $target_path); if(move_uploaded_file($_FILES['file']['tmp_name'], $targ

Unity3d与android通信

unity3d与android的通信,从网上搜索了一些文章,发现我的始终不成功!后来调试通了,现在 总结一下! 要注意几个地方: 1.不管是win7 64位还是32位,都可以!但是都必须要安装32位的java sdk1.6,eclipse 32,adt 32位! 2.新建的android项目,必须选择Target SDK为Android 4.0 SDK以上,如果选择 Android 4.0 SDK以下的,导入到unity中打包的时候会提示一些xml文件的错误! SDK选择图 如果不选择SDK 4

android通过HttpClient与服务器JSON交互

通过昨天对HttpClient的学习,今天封装了HttpClient类 代码如下: package com.tp.soft.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apach

Android学习笔记(四五):互联网通信-HttpClient、XML解析(W3C)

前几日Android发布了4.0 Icecream,昨天上网发现Begining Book中有Edition 3的版本,比对一下,还是有相当的改动,不仅仅增加了tablet的部分,对原有的章节有有一些修订,前后的调整等等.先按Edtion 2的顺序看,相同章节的看Edtion 3,然后回头看Edition 3的Chapter 24.25(E2的36).26.27.28.29.44.45.46.47几个新增章节.同时将模拟器改为Android 2.3的版本,已适应可能新增的改动. 访问Intern

详解 Android 通信【史上最全】

什么是通信? 通信 ,顾名思义,指的就是信息的传递或者交换 看完本文能收获什么? 按目录索引,你可以学习到 1. 组件间的通信,Activity,fragment,Service, Provider,Receiver 2. 进程间的通信,AIDL 3. 线程间的通信,Handler,AnsycTask,IntentService 4. 多个App间的通信 5. 使用大型开源框架完成组件通信,EventBus,otto 6. 网络通信基础篇:Google 课程–AnsycTask+HttpClie

SSH服务器与Android通信(1)--Android客户端接收数据

基本原理是Android客户端通过HttpClient向服务器发出请求,服务器向Android客户端返回JSON字符串,Android客户端解析JSON字符串获得数据. 1. 新建一个Android项目,主要文件如下: 其中MainActivity是UI,CommThread是通信线程,负责和服务器通信,Util是工具类,Var存放变量. 2. Var.java: package com.hzhi.school.util; import java.util.ArrayList; import j