`
苗振忠
  • 浏览: 59683 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android实现网络图片app

 
阅读更多
Android实现输入一个网址,就可以看百度图片美女,是不是很心动?
总共分三步:
1.从输入框中获取图片文件路径,在主线程中创建消息处理器,发送http请求:url.openConnection();
2.在创建的子线程中连接服务器get获取图片;
3.在主线程中捕获从子线程handler.sendMessage(msg)发送回来的消息msg,并解析图片数据,更新使用setImageBitmap()方法更新UI。

废话少说,直接上代码:

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.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; //帮我改UI
protected static final int ERROR = 2;
private EditText et_path;
private ImageView iView;
//第一步:在主线程中创建消息处理器
private Handler handler=new Handler(){
/*
* (non-Javadoc)第三步: looper 获得 子线程传过来的消息进行 UI更新
* @see android.os.Handler#handleMessage(android.os.Message)
*/
public void handleMessage(android.os.Message msg) { //重写handlemessage方法
if (msg.what==CHANGE_UI) {
Bitmap bitmap= (Bitmap)msg.obj;
iView.setImageBitmap(bitmap);
}
else if (msg.what==ERROR) {
Toast.makeText(MainActivity.this,"获取图片失败", 0).show();
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_path=(EditText)findViewById(R.id.et);
iView=(ImageView)findViewById(R.id.iv);
}

/*
* Android2.X直接在主线程中获取服务器数据,这样如果朋多多任务,主线程就会崩溃 4.0之后舍弃此方法
*/
//public void onClick(View view) {
// String path=et_path.getText().toString().trim(); //获取文件路径
// if (TextUtils.isEmpty(path)) {
// Toast.makeText(MainActivity.this,"图片路径不能为空", 0).show();
// } else {
// //连接服务器get获取图片
// try {
// URL url=new URL(path); //包装路径
// HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection(); //根据url发送http请求
// urlConnection.setRequestMethod("GET"); //指定获取图片的方式——get方式
// urlConnection.setConnectTimeout(5000); //5000毫秒相当于5秒
// int code=urlConnection.getResponseCode(); //得到服务器返回的响应码
// if (code==200) { //200代表获取成功 404代表获取失败
// InputStream iStream=urlConnection.getInputStream();
// Bitmap bitmap=BitmapFactory.decodeStream(iStream); //位图方法——把流转换为Bitmap
// iView.setImageBitmap(bitmap); //显示bitmap
// }else {
// Toast.makeText(MainActivity.this, "显示图片失败", 0).show();
// }
// } catch (Exception e) {
// e.printStackTrace();
// Toast.makeText(MainActivity.this, "获取图片失败", 0).show();
// }
// }
//}
//
/*
* Android4.0之后 改进版,新开辟子线程,在子线程中访问服务器获取数据
*/
public void onClick(View view) {
finalStringpath=et_path.getText().toString().trim(); //获取文件路径
if (TextUtils.isEmpty(path)) {
Toast.makeText(MainActivity.this,"图片路径不能为空", 0).show();
} else {
new Thread(){
public void run() {
//连接服务器get获取图片
try {
URL url=new URL(path); //包装路径 注意:内部类访问外部类,变量要加final
HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection(); //根据url发送http请求
urlConnection.setRequestMethod("GET"); //指定获取图片的方式——get方式
urlConnection.setConnectTimeout(5000); //5000毫秒相当于5秒
int code=urlConnection.getResponseCode();//得到服务器返回的响应码
if (code==200) { //200代表获取成功 404代表获取失败
InputStream iStream=urlConnection.getInputStream();
Bitmap bitmap=BitmapFactory.decodeStream(iStream); //位图方法——把流转换为Bitmap
//iView.setImageBitmap(bitmap); //显示bitmap
/*
* 第二步:子线程告诉主线程一个消息,帮我更改UI,内容bitmap
*/
Message msg=new Message();
msg.what=CHANGE_UI; //在开头定义CHANGE_UI的宏
msg.obj=bitmap; //obj代表消息里面的数据
handler.sendMessage(msg);
}else {
// Toast.makeText(MainActivity.this, "显示图片失败", 0).show();
Message msg=new Message();
msg.what=ERROR; //在开头定义CHANGE_UI的宏
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
Message msg=new Message();
msg.what=ERROR; //在开头定义CHANGE_UI的宏
handler.sendMessage(msg);
//Toast.makeText(MainActivity.this, "获取图片失败", 0).show();
}
}
}.start();
}
}
}

最终效果图:
分享到:
评论

相关推荐

    Android-Android开发启动app弹出一张广告图片Dialog可以查看大图查看某个图片功能

    这些库能有效地处理网络图片的下载、缓存和显示,避免内存泄漏和OOM(Out of Memory)问题。例如,使用Glide,我们可以在Dialog的代码中这样加载图片: ```java Glide.with(context) .load(advertisementImageUrl)...

    Android Studio —— 下载网络图片显示

    本话题将聚焦于如何在Android Studio中下载网络图片并将其显示在应用中,这是一个常见的需求,特别是在创建涉及UI展示的应用时。 首先,要实现这个功能,我们需要使用到Android的网络请求库,比如`Volley`、`OkHttp...

    Android Studio开发显示网络图片

    通过以上步骤,你可以基本实现Android Studio中网络图片的加载和显示。然而,对于初学者来说,理解并熟练掌握这些知识点可能需要时间和实践。因此,建议多做项目,多看文档,逐步提升自己的技能水平。同时,持续关注...

    android本地图片查看APP

    这个名为"android本地图片查看APP"的项目显然聚焦于这个功能,利用了Universal Image Loader库来处理图片的加载和展示。Universal Image Loader是一个强大的开源库,专为Android设计,用于异步加载、缓存和显示网络...

    基于Android Studio实现的新闻APP.7z

    - 图片加载库如 Glide 或 Picasso 可以高效地加载网络图片,并处理内存和磁盘缓存。 6. **导航与路由** - 使用Android Navigation组件来管理应用的导航流程,定义不同的目的地和动作,简化页面跳转逻辑。 7. **...

    android 获取网络图片

    通过使用HttpURLConnection和ImageView,配合合适的优化策略,可以实现高效且流畅的网络图片加载功能。然而,随着Android生态的发展,现代的网络请求库如Retrofit和图片加载库如Glide等提供了更高级别的抽象和便利性...

    Android app缓存清理实现

    本文将深入探讨如何实现Android app的缓存清理,并基于提供的"CacheClear"压缩包文件,讲解如何封装一个获取和清理缓存的工具类。 首先,了解Android缓存的作用。缓存是为了提高数据读取速度,将常用但加载较慢的...

    基于安卓AndroidStudio在线订餐app设计源码.zip

    【基于安卓Android Studio在线订餐app设计源码】 在安卓应用开发领域,Android Studio是主流的集成开发环境(IDE),它提供了丰富的工具和技术支持,帮助开发者构建高效、高性能的应用程序。本项目是一个基于...

    Android仿美团界面APP源码.zip

    在本项目中,"Android仿美团界面APP源码" 是一个专门为Android开发者提供的学习资源,旨在帮助他们理解和实现类似美团应用的用户界面。这个源码是实现一个完整的Android应用程序,包含多个功能模块,如首页、分类、...

    android安卓通过url获取网络图片并显示在imageview中

    在Android开发中,将网络上的图片加载到ImageView控件中是一项常见的需求。...这个简单的例子展示了如何实现基本的网络图片加载功能,实际开发中还可以根据需求进行优化和扩展,比如处理图片的尺寸、调整加载速度等。

    基于Android社区巡检系统APP的研究与实现.pdf

    "基于Android社区巡检系统APP的研究与实现" 基于 Android 社区巡检系统 APP 的研究与实现旨在解决社区治理范围扩大化、复杂化和各类安全事故频发的问题。该系统采用 Java 语言、MySQL 数据库和 OkHttp 网络框架,...

    Android基于Gallery实现网络图片和本地图片循环播放

    在Android开发中,实现一个基于Gallery的网络图片和本地图片循环播放功能,是常见的需求,尤其是在制作各种App的启动页、广告轮播或者个人相册等场景。这个功能的实现涉及到了Android UI组件、网络请求、图片加载库...

    基于Android Studio开发的安卓的记事本app

    在这个记事本App中,开发者可能使用了Android的内置组件如EditText和Button来创建用户输入界面,并通过网络请求(可能使用了 Retrofit 或 Volley 库)与服务器进行数据交互,实现用户身份验证。同时,为了用户体验,...

    Android实现长按图片保存至相册功能

    在Android开发中,实现长按图片保存至相册的功能是一项常见的需求,它允许用户保存应用内显示的图片到他们的设备相册。下面我们将详细讨论如何实现这个功能,并结合提供的代码片段进行解析。 首先,我们需要监听...

    基于Android的志愿服务管理APP的实现.pdf

    "基于Android的志愿服务管理APP的实现" 标题:"基于Android的志愿服务管理APP的实现" 描述:"基于Android的志愿服务管理APP的实现" 标签:"APP应用开发 数据分析 参考文献 专业指导" 部分内容:本文将对基于Android...

    用android studio实现的记账本app源码.zip

    总结,开发一个基于Android Studio的记账本App,不仅需要掌握Android开发基础,如UI设计、数据库操作、网络请求等,还需要了解用户体验设计,提供便捷易用的功能。通过持续优化和迭代,我们可以打造出一个深受用户...

    Android 漫画App源码

    5. **图片加载库**:由于漫画图片较多且大小不一,源码可能采用了像 Glide 或 Picasso 这样的图片加载库,它们能优化内存使用,实现图片的缓存和高效加载。 6. **UI设计**:漫画App的界面设计需要考虑用户体验,...

    Android studio开发的仿小红书App,简单App项目

    【Android Studio 开发仿小红书App】 在移动应用开发领域,Android Studio 是谷歌推出的官方集成开发环境(IDE),专为Android应用设计。这个项目标题表明我们正在讨论一个使用Android Studio 创建的简单App,该App...

    Android App中实现图片异步加载的实例分享

    以下是一个关于如何在Android App中实现图片异步加载的详细实例。 一、概述 在Android中,图片异步加载通常涉及以下几个关键组件: 1. **LruCache**:内存缓存机制,用于存储已经加载过的图片,减少对磁盘和网络的...

    Android Studio项目《天气预报app》

    总的来说,这个《天气预报app》项目涵盖了Android应用开发的多个关键方面,如UI设计、网络请求(获取天气数据)、数据解析(处理JSON数据)、以及与系统服务的交互(获取位置信息)。开发者可以通过这个项目学习如何...

Global site tag (gtag.js) - Google Analytics