利用HttpURLConnection请求网络数据
1 请求json数据
2 请求图片数据
注意事项:
1 只有主线程才可以更新UI
2 只有子线程才可以访问网络
1 请求json数据
步骤:
联网要在子线程中进行:
1 创建链接
2 开启链接
3 设置参数
4 判断返回码是否正确
5 获取输入流
6 创建输出流
7 将数据由输入流转到输出流
8 将数据由输入流转换成字符串
package com.Android.httpurlconnectiondemo;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
/**
* 请求数据HttpUrlConenction
*
* @author cui 创建链接url---开启链接---设置参数---判断返回码是否正确---获取输入流---
* ---创建输出流---将数据由输入流转到输出流---将数据由输入流转换成字符串
*
*/
public class MainActivity extends Activity {
private String result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread() {
public void run() {
try {
URL url = new URL("http://192.168.56.1:8080/common.json");
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if (200 == conn.getResponseCode()) {// HTTP_OK=200
InputStream input = conn.getInputStream();
ByteArrayOutputStream output = new ByteArrayOutputStream();
int len = 0;
byte[] bytes = new byte[1024];
while ((len = input.read(bytes)) != -1) {
output.write(bytes, 0, len);
}
output.flush();
input.close();
byte[] array = output.toByteArray();
result = new String(array);
Log.d("tag", "json = " + result);
}
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
}
}
2 请求图片数据
思路:根据url获取图片并显示。
步骤:
- 创建链接
- 打开链接
- 设置参数
- 判断返回码
- 获取输入流
- 创建file对象+输出流
- 将数据由输入流转到输出流
- 将数据转换成bitmap
- 发送消息
- handler接收消息并显示
如图:
缓存:
代码:
package com.android.httpurlconnectiondemo02;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.widget.ImageView;
/**
* 根据网址获取图片并显示
*
* @author cui 步骤:创建连接--打开连接--设置链接参数--判断返回码--获取输入流--创建file对象并创建输出流--将数据由输入流转到输出流
* --将数据由输出流转到bitmap--发送消息--handler接受消息更新UI
*/
public class MainActivity extends Activity {
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
new Thread() {
public void run() {
try {
URL url = new URL(
"http://h.hiphotos.baidu.com/image/h%3D200/sign=7cc7563e0f23dd543e73a068e108b3df/80cb39dbb6fd526667c2164ead18972bd50736fa.jpg");
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if (200 == conn.getResponseCode()) {// HTTP_OK=200
InputStream input = conn.getInputStream();
File file = new File(getCacheDir(), "刘亦菲");
FileOutputStream output = new FileOutputStream(file);
int len = 0;
byte[] bytes = new byte[1024];
while ((len = input.read(bytes)) != -1) {
output.write(bytes, 0, len);
}
output.flush();
input.close();
Bitmap bitmap = BitmapFactory.decodeFile(file
.getAbsolutePath());
Message msg = Message.obtain();
msg.what = HTTP_OK;
msg.obj = bitmap;
handler.sendMessage(msg);
} else {
Message msg = Message.obtain();
msg.what = HTTP_FAIL;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
Message msg = Message.obtain();
msg.what = INTENET_ERROR;
handler.sendMessage(msg);
}
};
}.start();
}
public static final int HTTP_OK = 1;
public static final int HTTP_FAIL = -1;
public static final int INTENET_ERROR = 0;
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case HTTP_OK:
Bitmap bitmpap = (Bitmap) msg.obj;
iv.setImageBitmap(bitmpap);
break;
case HTTP_FAIL:
break;
case INTENET_ERROR:
break;
default:
break;
}
};
};
}