HttpURLConnection获取数据

使用步骤:

1.创建Url

2.用Url打开连接

3.设置请求参数

4. 获取响应状态码

  2xxx 请求成功 3xxx重定向 4xxx资源错误 5xxx服务器错误

5.获取服务器返回的二进制输入流

6.添加网络权限
  <uses-permission
android:name="android.permission.INTERNET"/>



示例代码:

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
   private EditText   etPath;
   private ImageView  iv;
   private String     path;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      etPath = (EditText) findViewById(R.id.et_path);
      // 在主线程中创建
      iv = (ImageView) findViewById(R.id.iv);
   }
   // 1. 在主线程中创建Hanlder对象
   Handler  mHandler = new Handler() {
      public void handleMessage(Message msg) {
         // 把图片显示在imageview上
         iv.setImageBitmap((Bitmap)msg.obj);
      };
   };
   // 3. 在handleMessage()中修改UI

   /**
    * 1. 获取服务器返回的二进制输入流
    * 2. 把流转成位图对象
    * 3. 把图片显示在imageview上
    */
   public void look(View v) {
      System.out.println("点击按钮的线程:" + Thread.currentThread().getName());
       path = etPath.getText().toString().trim();
      if (TextUtils.isEmpty(path) || !path.startsWith("http")) {
         Toast.makeText(this, "请输入正确的网址", 0).show();
         return;
      }
      // 开启线程
      new Thread() {
         public void run() {
            requestNetWork();
         };
      }.start();
   }
   /**
    * 网络通讯
    */
   protected void requestNetWork() {
      try {
         // 1. 写一个Url
         URL url = new URL(path);
         // 2. 用这个Url打开http连接
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
         // 3. 设置请求参数
         // 不设置,默认就是get请求
         conn.setRequestMethod("GET");
         conn.setConnectTimeout(3000);
         // 4. 获取状态吗
         // * 2xxx响应成功 3xxx重定向 4xxx资源错误 5xxx服务器错误
         int code = conn.getResponseCode();
         if (code == 200) {
            // 5. 获取服务返回的二进制输入流
            InputStream is = conn.getInputStream();
            // 把流转成位图对象
            Bitmap bmp = BitmapFactory.decodeStream(is);
            // 2. 在子线程中用handler发消息
            Message msg = new Message();
            msg.obj = bmp;
            mHandler.sendMessage(msg);
         } else {
            // Toast.makeText(this, "code:"+code, 0).show();
       }
      } catch (Exception e) {
         e.printStackTrace();
         // Toast.makeText(this, "服务器忙", 0).show();
      }
   }
}

查看网络文字示例代码
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

   private static final int MSG_SUCC    = 0;
   private static final int MSG_ERR         = 1;
   private static final int MSG_ERR_CODE = 2;
   private EditText         etPath;
   private TextView         tvContent;
   private String           path;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      etPath = (EditText) findViewById(R.id.et_path);
      tvContent = (TextView) findViewById(R.id.tv);
   }
   /**
    *  1. 获取用户输入的网址,做非空判断
    *  2. 在子线程中进行网络通讯
    *  3. 获取服务器返回的二进制数据流
    *  4. 把流转成文字
    *  5. 用Handler显示文字
    */
   public void look(View v) {
      // 获取用户输入的网址,做非空判断
      path = etPath.getText().toString().trim();
      if (TextUtils.isEmpty(path) || !path.startsWith("http")) {
         Toast.makeText(this, "亲,请输入正确的网址,例如http开头", 0).show();
         return;
      }
      // 在子线程中进行网络通讯
      new Thread() {
         public void run() {
            requestNetWork();
         };
      }.start();
   }
   /**
    * 获取服务器返回的二进制数据流
    */

   protected void requestNetWork() {
      try {
         // 1. 写一个Url
         URL url = new URL(path);
         // 2. 用这个Url打开http连接
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
         // 3. 设置请求参数
         conn.setRequestMethod("GET");
         conn.setConnectTimeout(3000);
         // 4. 获取状态吗
         // * 2xxx响应成功 3xxx重定向 4xxx资源错误 5xxx服务器错误
         int code = conn.getResponseCode();
         if (code == 200) {
            // 5. 获取服务返回的二进制输入流
            InputStream is = conn.getInputStream();
            // 把流转成文字
            String text = StringUtils.parseStream2Str(is);
            // 用Handler显示文字
            Message msg = Message.obtain();// 从消息池中获取消息
            msg.obj = text;
            msg.what = MSG_SUCC;
            mHandler.sendMessage(msg);
         } else {
            Message msg = Message.obtain();// 从消息池中获取消息
            msg.obj =  code;
            msg.what =MSG_ERR_CODE;
            mHandler.sendMessage(msg);

         }

      } catch (Exception e) {

         e.printStackTrace();

         mHandler.sendEmptyMessage(MSG_ERR);
      }
   }
   Handler  mHandler = new Handler() {
      public void handleMessage(Message msg) {
        switch (msg.what) {
           case MSG_SUCC:
              tvContent.setText((String) msg.obj);
                break;
            case MSG_ERR_CODE:
               Toast.makeText(MainActivity.this, "code:"+msg.obj, 0).show();
                break;
            case MSG_ERR:
                Toast.makeText(MainActivity.this, "服务器忙", 0).show();
                break;
            default:
                break;
         }
      };
   };
}

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
/**
 * 操作字符
 */
public class StringUtils {
   /**
    * 从流中转成字符串
    *
    * @param is
    *            输入流
    * @return null表示失败
    */
   public static String parseStream2Str(InputStream is) {
      //内存输出流
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      int len = -1;
      byte[] buffer = new byte[1024*8];
      try {
         while((len = is.read(buffer)) != -1){
            baos.write(buffer, 0, len);
         }
         return new String(baos.toByteArray());
      } catch (Exception e) {
         e.printStackTrace();
         return null;
      }
   }
}
时间: 2024-12-28 01:09:58

HttpURLConnection获取数据的相关文章

【笔记——Java】关于HttpUrlConnection获取数据中文乱码问题

前段时间写了一个从顺丰获取快递信息的程序,通过HttpUrlConnection 获取的数据乱码,明明拦截的数据写着utf-8还是乱码,后来终于发现原因是没有对数据进行解压,上拦截图: 总算是找到问题所在了,数据传输似乎会先压缩,估计是为了传输效率吧. 于是乎先进行解压吧: 1 /** 2 * 这是一个静态方法,数据工具方法,传入输入流in,以及数据长度,就能获取解压后的结果byte数组 3 * @param in 一个输入流,可以通过HttpUrlConnection对象的getInputSt

从网络获取数据,解析后输出。

我们要做的是从网络获取数据,在Activity中显示出来. 首先我们要导入gson包,它的作用是把Json字符串转换成相等的Java对象.把从网络获取数据和保存数据的方法写成类,方便以后调用. import java.io.BufferedReader; //从网络获取数据import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLCon

android应用开发_网络部分2——采用HttpURLConnection获取获取网页源代码

本文是android应用开发_网络部分1——采用HttpURLConnection获取网络图片的延续练习. 接下来,我们再来一个查看网页源代码的工程来加深了解. 布局上还是一个竖直排列的线性布局,一个edittext用于输入html路径,一个button,用于点击获取,一个textview用于显示. main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:and

androidclient和站点数据交互的实现(基于Http协议获取数据方法)

androidclient一般不直接訪问站点数据库,而是像浏览器一样发送get或者post请求.然后站点返回client能理解的数据格式,client解析这些数据.显示在界面上.经常使用的数据格式是xml和json. 能够理解client事实上是一个你自定义标记语言的浏览器,一般浏览器能解析的是html+css的数据,而androidclient能解析的是xml和json(或者都不是而是你自定义的火星格式),服务端为了能满足client输出这样的数据格式的需求,不得不专门针对client开发不同

android客户端和网站数据交互的实现(基于Http协议获取数据方法)

android客户端一般不直接访问网站数据库,而是像浏览器一样发送get或者post请求,然后网站返回客户端能理解的数据格式,客户端解析这些数据,显示在界面上,常用的数据格式是xml和json. 可以理解客户端其实是一个你自己定义标记语言的浏览器,一般浏览器能解析的是html+css的数据,而android客户端能解析的是xml和json(或者都不是而是你自己定义的火星格式),服务端为了能满足客户端输出这种数据格式的需求,不得不专门针对客户端开发不同于浏览器访问的接口. 开发一个网站的客户端你需

Http 通过Get获取数据

import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.apache.http.message.BasicNameValuePair; public class Ht

Http 以post方式获取数据

import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import j

Android通过HttpURLConnection获取JSON并进行UI更新

本例子中使用的是:HttpURLConnection+Thread+Handler的组合,在 new Thread中通过HttpURLConnection获取JSON数据后并在Handler里对UI界面进行更新. 也可以用过HttpClient ,AsyncTask实现此功能,此处就不说啦. 废话不多少直接上代码了 -------------------------------分割线---------------------------------------- activity_main.xm

Http Get 从服务器中获取数据 存储到本地

package com.http.get; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.apache.http.message.BasicNameValu