文档章节

Android网络应用(图片查看器)

维特的烦恼
 维特的烦恼
发布于 2014/01/27 21:08
字数 572
阅读 105
收藏 0

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	android:id="@+id/widget32"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical"
	xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
	android:id="@+id/iv"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	android:layout_weight="1000" />
<EditText
	android:id="@+id/et"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:hint="&#35831;&#36755;&#20837;&#22320;&#22336;"
	android:textSize="18sp"
	android:text="http://i7.hexunimg.cn/2013-03-29/152620496.jpg"
	android:gravity="center" />
<Button
    android:onClick="click"
	android:id="@+id/btn"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:text="&#33719;&#21462;&#24182;&#27983;&#35272;" />
</LinearLayout>

核心Activity:

package com.pas.imgviewer;

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.text.TextUtils;
import android.view.Menu;
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 CHANGE_UI = 1;
	protected static final int TOAST = 2;
	private Handler handler = new Handler()
	{
		@Override
		public void handleMessage(android.os.Message msg)
		{
			if (msg.what == CHANGE_UI)
			{
				ImageView iv = (ImageView) findViewById(R.id.iv);
				iv.setImageBitmap((Bitmap) msg.obj);
			}
			if (msg.what == TOAST)
			{
				Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
			}

		};
	};

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

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	public void click(View view)
	{
		final String imgurl = ((EditText) findViewById(R.id.et)).getText().toString().trim();
		if (TextUtils.isEmpty(imgurl))
		{
			Toast.makeText(this, "路径不可为空", Toast.LENGTH_SHORT).show();
		} else
		{
//			/*
//			 * android 4.0开始	网络操作不可以在主线程中进行 会导致ANR
//			 * 需要在子线程中进行 
//			 * 导致ANR原因,主线程做过多耗时的操作
//			 * 
//			 */
			new Thread()
			{
				public void run()
				{
					try
					{
						// 链接服务器
						URL url = new URL(imgurl);
						HttpURLConnection conn = (HttpURLConnection) url.openConnection();
						conn.setRequestMethod("GET");
						conn.setConnectTimeout(5000);
						conn.setReadTimeout(10000);
						// 请求参数
						// 1、浏览器版本
						conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1");
						// 2、Reffer
						conn.setRequestProperty("Referer", "http://image.baidu.com/i?ct=503316480&z=0&tn=baiduimagedetail&ipn=d&word=K29&step_word=&ie=utf-8&in=11493&cl=2&" + "lm=-1&st=-1&pn=4&rn=1&di=76845442520&ln=1951&fr=&&fmq=1390817152763_R&ic=0&s=&se=1&sme=0&tab=&width=0&height=0&face=0&is=&istype=2&ist=&jit=" + "&objurl=http%3A%2F%2Fi7.hexunimg.cn%2F2013-03-29%2F152620496.jpg#pn4&-1&di76845442520&objURLhttp%3A%2F%2Fi7.hexunimg.cn%2F2013-03-29%2F152620496.jpg&" + "fromURLippr_z2C%24qAzdH3FAzdH3Fpjvi_z%26e3Bijx7g_z%26e3Bv54AzdH3Fda8n-an-dlAzdH3F8cdmda9l9_z%26e3Bip4s&W500&H375&T5700&S32&TPjpg");
						int resCode = conn.getResponseCode();
						if (resCode == -1)
						{
							Toast.makeText(MainActivity.this, "获取失败,请检查地址,Code=" + resCode, Toast.LENGTH_SHORT).show();
						} else if (resCode == 200)
						{
							InputStream ins = conn.getInputStream();
							Bitmap img = BitmapFactory.decodeStream(ins);
							// ImageView iv = (ImageView) findViewById(R.id.iv);
							// iv.setImageBitmap(img);

//							/*
//							 * 子线程中不可以修改UI 
//							 * 刷新UI只能在UI线程当中
//							 * 此处利用android消息处理机制解决
//							 */
							Message msg = new Message();
							msg.what = CHANGE_UI;
							msg.obj = img;
							handler.sendMessage(msg);
						} else
						{
							Message msg = new Message();
							msg.what = TOAST;
							msg.obj = "获取失败,请检查地址,Code=" + resCode;
							handler.sendMessage(msg);
						}
					} catch (Exception e)
					{
						e.printStackTrace();
						Message msg = new Message();
						msg.what = TOAST;
						msg.obj = "获取失败";
						handler.sendMessage(msg);
					}
				}

			}.start();
		}
	}
}


© 著作权归作者所有

共有 人打赏支持
维特的烦恼
粉丝 21
博文 97
码字总数 42329
作品 0
天津
私信 提问
Chrome OS 开始入侵移动平台

Google 有两套系统:本地应用为主的 Android,网络应用为主的 Chrome OS。两套系统是否会融合?这一直是人们关心的问题。目前来看,Android 的发展非常迅猛,而 Chrome OS 相对缓慢,似乎 An...

oschina
2014/01/31
3.5K
11
Android开发优化之——对Bitmap的内存优化

在Android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。所以,对于图片的内存优...

KingMing
2015/04/03
0
0
Android 内容提供器---创建内容提供器(实现内容提供器权限)

在“安全和权限”的专题中全面详细的描述了有关Android系统的权限和访问。“数据存储”的专题也描述了安全和权限对各种存储类型的影响。因此以下简要介绍几个重点内容: 1. 默认情况下,保存...

长平狐
2012/10/16
299
0
[Android] Android开发优化之——对Bitmap的内存优化

在Android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。所以,对于图片的内存优...

haman
2014/01/25
0
1
Android应用开发中对Bitmap的内存优化

在Android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。所以,对于图片的内存优...

等待流星
2014/09/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

商品详情页上拉查看详情

商品详情页上拉查看详情 目录介绍 01.该库介绍 02.效果展示 03.如何使用 04.注意要点 05.优化问题 06.部分代码逻辑 07.参考案例 01.该库介绍 模仿淘宝、京东、考拉等商品详情页分页加载的UI效...

潇湘剑雨
19分钟前
0
0
Netty内存池之PoolArena详解

PoolArena是Netty内存池中的一个核心容器,它的主要作用是对创建的一系列的PoolChunk和PoolSubpage进行管理,根据申请的不同内存大小将最终的申请动作委托给这两个子容器进行管理。整体上,P...

爱宝贝丶
24分钟前
1
0
Django使用Channels实现WebSocket--下篇

希望通过对这两篇文章的学习,能够对Channels有更加深入的了解,使用起来得心应手游刃有余 通过上一篇《Django使用Channels实现WebSocket--上篇》的学习应该对Channels的各种概念有了清晰的认...

运维咖啡吧
31分钟前
2
0
linux下设置定时执行shell脚本的示例

很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据、数据库数据等 不适合人工经常做的一些操作这里简单说下 shell Shell俗称壳,类似于DOS下的command...

阿锋zxf
35分钟前
3
0
介绍Kubernetes监控Heapster

什么是Heapster? Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS,Kubernetes有个出名的监控agent—cAdvisor。在每个kubernetes Node上都会运行cAdvisor,它会收集本机...

xiangyunyan
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部