HttpUrlConnection

package com.ch.day4_httpurlconn;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private TextView jsonData;
    private Button login;
    //服务器地址,路径
    public static final String JSON_URL = "http://169.254.109.73:8080/tqyb/newsList.json";
    public static final String LOGIN_URL = "http://169.254.109.73:8080/serverof1407a/loginServlet";
    
    //定义一个handler的匿名内部类的对象
    Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            if(msg.what == 1){
                jsonData.setText((String)msg.obj);
            }else if(msg.what == 2){
                login.setText((String)msg.obj);
            }
        };
    };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        init();
    }
    
    public void init(){
        jsonData = (TextView) findViewById(R.id.jsonData);
        login = (Button) findViewById(R.id.login);
        //点击login到服务器登陆验证
        login.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //在次线程中,请求web服务器
                new Thread(){
                    public void run() {
                        //调用httpurlconnection的get请求,到服务器请求json数据
//                        String rs = loginByServerByGet("admin", "123456");
                        
                        String rs = loginByServerByPost("admin1", "123456");
                        //在此次线程中,通过handler把数据传递给主线程,显示在主线程的组件中
                        handler.sendMessage(handler.obtainMessage(2, rs));
                        if("success".equals(rs)){
                            //跳转到功能页面,
                        }else{
                            //提示登录失败,请修改登录信息等等
                        }
                        
                    };
                }.start();
            }
        });
        
        jsonData.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //在次线程中,请求web服务器
                new Thread(){
                    public void run() {
                        //调用httpurlconnection的get请求,到服务器请求json数据
                        String rs = getJsonFromWeb();//此方法请求web服务器
                        //在此次线程中,通过handler把数据传递给主线程,显示在主线程的组件中
                        handler.sendMessage(handler.obtainMessage(1, rs));
                    };
                }.start();
            }
        });
    }
    //到服务器验证登陆信息,,通过post请求
    public String loginByServerByPost(String name,String pass){
        String rs = "";
        URL url = null;
        HttpURLConnection urlConn = null;
        BufferedReader br = null;
        DataOutputStream output = null;
//        StringBuffer sb = new StringBuffer();//定义缓存字符串,拼装字符串
        try {
            
            url = new URL(LOGIN_URL);//创建和服务器的连接对象URL
            urlConn = (HttpURLConnection) url.openConnection();//打开连接
            urlConn.setConnectTimeout(5*1000);//设置连接超时容忍时间
            urlConn.setReadTimeout(5*1000);//设置读取时间
            
            //设置post请求
            urlConn.setRequestMethod("POST");
            urlConn.setDoInput(true);
            urlConn.setDoOutput(true);
            //通过post请求,向服务器传值
            output = new DataOutputStream(urlConn.getOutputStream());//创建服务器的输出流
            String data = "username="+name+"&userpass="+pass;
            output.write(data.getBytes());
            output.flush();
            output.close();//传值成功,完毕
            
            if(urlConn.getResponseCode() == 200){//如果响应码为200表示响应成功,并且同时成功的相应了数据
                //获得服务器相应的数据,字节输入流(数据流),转换为缓存字符流便于读取
                br = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"utf-8"));
                rs = br.readLine();//获得服务器返回的简单数据
                System.out.println(rs);
            }
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return rs;//转换为字符串,返回
    }
    //到服务器验证登陆信息,,通过get请求
    public String loginByServerByGet(String name,String pass){
        String rs = "";
        URL url = null;
        HttpURLConnection urlConn = null;
        BufferedReader br = null;
        StringBuffer sb = new StringBuffer(LOGIN_URL);//定义缓存字符串,拼装字符串
        try {
            sb.append("?username="+name);
            sb.append("&userpass="+pass);
            System.out.println(sb.toString());
            url = new URL(sb.toString());//创建和服务器的连接对象URL
            urlConn = (HttpURLConnection) url.openConnection();//打开连接
            urlConn.setConnectTimeout(5*1000);//设置连接超时容忍时间
            urlConn.setReadTimeout(5*1000);//设置读取时间
            if(urlConn.getResponseCode() == 200){//如果响应码为200表示响应成功,并且同时成功的相应了数据
                //获得服务器相应的数据,字节输入流(数据流),转换为缓存字符流便于读取
                br = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"utf-8"));
                rs = br.readLine();//获得服务器返回的简单数据
                System.out.println(rs);
            }
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return rs;//转换为字符串,返回
    }
    
    
    public String getJsonFromWeb(){
        URL url = null;
        HttpURLConnection urlConn = null;
        BufferedReader br = null;
        StringBuffer sb = new StringBuffer();//定义缓存字符串,拼装字符串
        try {
            url = new URL(JSON_URL);//创建和服务器的连接对象URL
            urlConn = (HttpURLConnection) url.openConnection();//打开连接
            urlConn.setConnectTimeout(5*1000);//设置连接超时容忍时间
            urlConn.setReadTimeout(5*1000);//设置读取时间
            if(urlConn.getResponseCode() == 200){//如果相应码为200表示响应成功,并且同时成功的相应了数据
                //获得服务器相应的数据,字节输入流(数据流),转换为缓存字符流便于读取
                br = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"utf-8"));
                String str = null;
                while((str = br.readLine()) != null){//一行行的读取,一行行的收集
                    sb.append(str);
                }
            }
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return sb.toString();//转换为字符串,返回
    }

}

posted @ 2016-01-24 20:37  Mybk0000  阅读(139)  评论(0编辑  收藏  举报