使用httpUrlConnection提交get请求

首先建立本地的URL站点

jsp代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>疯子的测试页面</title>
</head>
<body>
<%
//Thread.sleep(1000);
//java代码
System.out.println("测试输出");

//请求对象
String name = request.getParameter("name");
System.out.println("测试参数 name =" + name);


//响应对象
out.append("收到的测试信息 name = " + name +"<br>");

%>
<%=name%>
</body>
</html>

输出效果:

xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.hanqi.test6.WebActivity"
    android:orientation="vertical">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_5"
        android:hint="URL地址"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Get方式"
            android:onClick="bt5_OnClick"/>

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Post方式"
            android:onClick="bt6_OnClick"/>

    </LinearLayout>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:id="@+id/et_6"/>
</LinearLayout>

Java代码:

package com.hanqi.test6;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class WebActivity extends AppCompatActivity {

    EditText et_5;
    EditText et_6;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web);

        et_5 = (EditText)findViewById(R.id.et_5);
        et_6 = (EditText)findViewById(R.id.et_6);
    }

    public void bt5_OnClick(View v)
    {

    /*
     * 使用httpUrlConnection提交get请求
     */
    /*
        1. 显示ProgressDialog
        2. 启动分线程
        3. 在分线程, 发送请求, 得到响应数据
            1). 得到path, 并带上参数name=Tom1&age=11
            2). 创建URL对象
            3). 打开连接, 得到HttpURLConnection对象
            4). 设置请求方式,连接超时, 读取数据超时
            5). 连接服务器
            6). 发请求, 得到响应数据
                得到响应码, 必须是200才读取
                得到InputStream, 并读取成String
            7). 断开连接
        4. 在主线程, 显示得到的结果, 移除dialog
     */
        //1. 显示ProgressDialog
        final ProgressDialog dialog = ProgressDialog.show(this, null, "正在请求中...");
        //2. 启动分线程
        new Thread(){
            //3. 在分线程, 发送请求, 得到响应数据
            public void run() {
                try {
                    //1). 得到path, 并带上参数name=Tom1&age=11
                    String path = et_5.getText().toString()+"?name=Tom1&age=11";
                    //2). 创建URL对象
                    URL url = new URL(path);
                    //3). 打开连接, 得到HttpURLConnection对象
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    //4). 设置请求方式,连接超时, 读取数据超时
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(6000);
                    //5). 连接服务器
                    connection.connect();
                    //6). 发请求, 得到响应数据
                    //得到响应码, 必须是200才读取
                    int responseCode = connection.getResponseCode();
                    if(responseCode==200) {
                        //得到InputStream, 并读取成String
                        InputStream is = connection.getInputStream();
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        byte[] buffer = new byte[1024];
                        int len = -1;
                        while((len=is.read(buffer))!=-1) {
                            baos.write(buffer, 0, len);
                        }
                        final String result = baos.toString();

                        baos.close();
                        is.close();

                        //4. 在主线程, 显示得到的结果, 移除dialog
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                et_6.setText(result);
                                dialog.dismiss();
                            }
                        });
                    }
                    //7). 断开连接
                    connection.disconnect();
                } catch (Exception e) {
                    e.printStackTrace();
                    //如果出了异常要移除dialog
                    dialog.dismiss();
                }
            }
        }.start();
    }
 }

输入本地网络地址显示效果图:

posted @ 2016-04-19 20:27  D(a/e)mon  阅读(1125)  评论(0编辑  收藏  举报