您的位置:首页 > 理论基础 > 计算机网络

通过HTTP访问网络资源

2014-08-12 23:20 323 查看
添加访问网络的权限:<uses-permission android:name="android.permission.INTERNET"/>

package com.shz.imageviewer;

import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
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.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends Activity {

private ImageView iv;
private EditText txtPath;

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

this.iv = (ImageView) this.findViewById(R.id.iv);
this.txtPath = (EditText) this.findViewById(R.id.txtPath);
}

// Android新版系统中不允许UI处理比较耗时的操作(ANR),如果有耗时操作,可以通过开启一个子线程去处理;
// 只有UI线程可以更新view对象。

// 如果有多个子线程更新UI,更新UI完毕后,检查这个更新的操作是否在主线程的代码中执行的,
// 如果是主线程,则不会有问题
// 如果不是主线程,则会抛出异常:CalledFromWrongThreadException

// 1.定义一个handler消息处理器
private Handler handler = new Handler(){

@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Bitmap bitmap = (Bitmap)msg.obj;
iv.setImageBitmap(bitmap);
break;
case 2:
Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
};

private void sendMessage(int what,Object obj)
{
Message msg = new Message();
msg.what = what;
msg.obj = obj;
handler.sendMessage(msg);
}

public void click(View view) {
final String path = this.txtPath.getText().toString().trim();
if (TextUtils.isEmpty(path)) {
return;
}

// 2.开启一个子线程获取网络图片资源数据
new Thread(){
public void run() {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(10000);
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36");

int code = conn.getResponseCode();
if ( code == 200) {
Bitmap bitmap = BitmapFactory.decodeStream(conn.getInputStream());

// 3.利用handler消息处理器发送一条消息到主线程的MessageQueue消息队列中,主线程中
//   有一个消息轮询器Looper,此Looper会去不断的轮询MQ中的消息并
//   交给handler的handleMessage()方法去处理
sendMessage(1, bitmap);
} else {
sendMessage(2, "获取图片失败");
}
} catch (Exception e) {
e.printStackTrace();
sendMessage(2, "获取图片失败");
}
};
}.start();
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: