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;

    }
}

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


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。