安卓--获取网络图片

package com.itheima.viewimg;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
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 {

protected static final int SUCCESS = 0;
protected static final int NETWORK_ERROR = 1;
protected static final int ERROR = 2;
private EditText ed_path;
private ImageView iv;
private String path;

//这就是小秘
private Handler mHandler = new Handler(){

public void handleMessage(Message msg) {

switch (msg.what) {
case SUCCESS:
//取出消息中的数据
Bitmap bitmap = (Bitmap) msg.obj;
iv.setImageBitmap(bitmap);
break;
case NETWORK_ERROR:
//弹出 土司 消息
System.out.println("====== NETWORK_ERROR");
Toast.makeText(MainActivity.this, "连接错误 ....", 0).show();
break;
case ERROR:
//弹出 土司 友好 提示 消息
System.out.println("====== ERROR");

Toast.makeText(MainActivity.this, " 获得资源失败 ....", 0).show();
break;

default:
break;
}

};
};

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

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

public void gogetImage(View v){

path = ed_path.getText().toString().trim();
// int i=1/0;

if(TextUtils.isEmpty(path)){

Toast.makeText(this, "路径有错误...", 0).show();
return;
}

new Thread(){

public void run() {

try {
URL url = new URL(path);

//android 中,谷歌提供好的 用来连接网络的 api

// 这些 api 你看上去 就是 跟你小时候学的是一模一样的, 但是 方法中具体的实现细节 是与之前的 你学习的jdk 中的api 是不一样的.
//
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

//连接网络的时候, 有很多 不确定性...
// 为了提供用户的感受, 会 设置一个 连接 超时的 时间
conn.setConnectTimeout(5000);

//设置请求的方式
conn.setRequestMethod("GET");

//拿到 返回的数据的类型
String contentType = conn.getContentType();

//数据的长度
int length = conn.getContentLength();

System.out.println("contentType :" + contentType);
System.out.println("length :" + length);

// 获得 服务器 返回的 状态吗 , 根据 状态码 去判断 是否 成功
int code = conn.getResponseCode();

// 200 , 404 ,500, 302, 304 ..

if(code==200){

//进来 则表示 成功的处理的 请求, 返回了 数据

// 获得返回的图片的 流数据
InputStream in = conn.getInputStream();

//如果去解析呢 ??? --如何解析成一个 图片显示

// 这个事儿经常要做 ,谷歌 工程师 已经帮咱们提供好了现成 的类, 可以将一个 流数据转换为 一个图片

//这已经是图片了
Bitmap bitmap = BitmapFactory.decodeStream(in);

// iv.setImageBitmap(bitmap);

//子线程中通过小秘 去发一个消息 出去
// Message msg = new Message();

//这里 内部 会判断 message 是否 创建过, 如果 创建过, 就获得原有 的, 然后
// 去 更改 原有的msg 的信息,从而这个msg 又有了新的值, 避免的重复 创建 msg 对象,
// 节省了内存 的开销
Message msg = Message.obtain();
msg.what=SUCCESS;
msg.obj = bitmap;

//放到 了 消息 队列 , messageQuerue中, 有 循环器looper 去 取出消息 ,
// 然后 再通知 小秘 去处理一下
mHandler.sendMessage(msg);

in.close();
}else{

//通知 ui 去给用户一个友好的提示
// Toas
Message msg = Message.obtain();
msg.what=ERROR;

mHandler.sendMessage(msg);

}

//这里要连接网络, 会 耗费用户的 money, 所以需要去申请连接网络的权限

} catch (Exception e) {
//通知 ui 去给用户一个友好的提示

//代码 内部也是 在更新 ui , 更新ui 是不能放在 子线程中去做的
// Toast.makeText(MainActivity.this, "连接错误 ....", 0).show();

Message message = Message.obtain();
message.what= NETWORK_ERROR;
mHandler.sendMessage(message);

e.printStackTrace();
}

};

}.start();
// 连接网络的api URL类

}

}

时间: 2024-10-19 18:50:38

安卓--获取网络图片的相关文章

检测SDWebImage有没有缓存图片 IOS 获取网络图片大小

NSURL *url = [NSURL URLWithString:[model.content objectForKey:@"image"]];             //请求网络地址数据的同步方法             //因为这个方法在子线程(全局队列)中执行,所以不需要考虑死线程的问题             SDWebImageManager *manager = [SDWebImageManager sharedManager];              [manag

iOS下载图片之前获取网络图片尺寸的失败尝试

最近一直在找获取网络图片的size的方式,最后得出两个结论: 1 使用分线程下载下来,然后获得图片的size 2 使用网络请求图片的头文件,然后从头文件中找到图片大小的信息 第一种方法需要主线程分线程切换,因为在使用tableView来reloadData的时候,刷表老是出问题,先放着不管 然后我重点是想搞一下第二个方法: 在网上找到了一个博客:http://cxjwin.github.io/2013/11/05/preview_image_size/ 大神写的很不错 主要思路就是先在网上找一个

获取网络图片(Bitmap)至内存或者SD卡

/** * 获取网络图片 * 注意权限: * <uses-permission android:name="android.permission.INTERNET"/> */ private Bitmap getBitmapFromNetWork(String imageUrl){ URL url=null; Bitmap bitmap=null; InputStream inputStream=null; HttpURLConnection httpURLConnecti

URL转Drawable之 Android中获取网络图片的三种方法

转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用线程来实现.下面列三种获取url图片的方法: 1.直接获取:(容易:ANR,不建议) [java] view plain copy mImageView = (ImageView)this.findViewById

IOS 获取网络图片的大小 改变 图片色值 灰度什么的方法集合

第一.复制对象的基本概念 复制一个对象为副本,开辟一块新的内存来存储副本对象. 第二.如果一个对象想具备复制的功能,必须实现<NSCopying>协议和<NSMutableCopying>协议 NSObject自带的常用的对象有:NSNumber.NSString.NSArray.NSDictionary.NSMutableArray.NSMutableDictionay.NSMutableString,copy产生的对象时不可变的,mutableCopy产生的对象时可变的 第三.

Android中获取网络图片的三种方法

android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用线程来实现.下面列三种获取url图片的方法: 1.直接获取:(容易:ANR,不建议) mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ; Drawable drawable = loadImageFromNetwo

获取网络图片的大小 改变 图片色值 灰度什么的方法集合-b

直接上代码了 头文件   // 图片处理 0 半灰色  1 灰度   2 深棕色    3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelType:(UIImageGrayLevelType)type; //色值 变暗多少 0.0 - 1.0 +(UIImage*)imageWithImage:(UIImage*)image darkValue:(float)darkValue; /** 获取网络图片的Size, 先通过文件头来获取图

iOS 获取网络图片的大小

一直都在找关于获取网络图片的大小的方法, 今天找到了一个能解决的办法 ,如下 1, 导入框架 #import <ImageIO/ImageIO.h> 2. 使用此方法得到image的size - (CGSize)getImageSizeWithURL:(NSURL *)url { CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)url, NULL); CGFloat width = 0.0f, height

Cocos2dx-获取网络图片并显示

本文转载于:http://www.cnblogs.com/zisou/p/cocos2dxWLTP.html 经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是cocos2dx - http的异步方法,相信有很多地方都会使用 到着这个需求:比如获取玩家的头像. 我就直接贴代码了,只需一个类就可以搞定: HttpGetImg.h #ifndef __HttpGetImg__ #define __HttpGetImg__ #include "cocos2d.h" #i