黎活明8天快速掌握android视频教程--23_网络通信之网络图片查看器
1、首先新建立一个java web项目的工程。使用的是myeclipe开发软件

图片的下载路径是http://192.168.1.103:8080/lihuoming_23/3.png 当前手机和电脑在同一个局域网范围内 2 、Android项目的工程如下

整个工程采用MVC模式:
1、controller是控制层、包括activity 、fragment 、adapter、broadcast、service
2、bussiess是业务层,主要负责具体的业务操作,例如从后台下载下载图片这就是一个具体的业务操作,业务操作的时候,最后不要对业务操作过程中产生的异常进行处理,应该将异常抛出去到控制层,由控制层对异常进行处理,控制层如果收到了异常,说明该业务失败,控制层在做出相应的toast提示,或者提示用于做出相应的操作。
这里最好的操作是:定义一个业务操作接口,然后在写一个业务的实现类,controller只和业务类打交道
3、模型层:主要是对数据进行操作、包括javabean对象、db dao
4、utils:工具类
2 Android studio工程
1、xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".controller.activity.MainActivity"> <TextView
android:textSize="25sp"
android:text="从网络获得下载的图片"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_main_download"
android:textSize="25sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击下载"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/iv_main_show"/> </LinearLayout>
2 业务操作类
按照上面的规范最好写出:
先定义一个业务操作类的接口
public interface ImageBussiess {
public static byte[] downLoadImage(String path) throws Exception
}
然后定义业务的实现类
/**
* Created by Administrator on 2017/4/17.
* 下载图片的业务操作类,业务层不要try catch异常
* 应该将异常抛出去,由控制层activity来进行处理和显示
*
*/
public class ImageBussiessImp Implement ImageBussiess{
public static byte[] downLoadImage(String path) throws IOException {
URL url = new URL(path);
HttpURLConnection openConnection = (HttpURLConnection) url.openConnection();
openConnection.setConnectTimeout(5000);
openConnection.setRequestMethod("GET"); //采用get的请求方式
openConnection.connect();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
InputStream inputStream = null;
if(openConnection.getResponseCode() == 200){
inputStream = openConnection.getInputStream();
byte[] buffer = new byte[1024]; int len = -1;
while ((len = inputStream.read(buffer)) != -1){
outputStream.write(buffer,0,len);
}
}
inputStream.close();
return outputStream.toByteArray();
}
}
4 activity
public class MainActivity extends Activity {
private ImageView iv_main_show;
private Button btn_main_download;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
}
private void initListener() {
btn_main_download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ExecutorService executorService = Executors.newCachedThreadPool(); // 网络下载都必须在子线程中进行,这里使用的是线程池的方式开启线程
executorService.execute(new Runnable() {
@Override
public void run() {
String path = "http://192.168.1.103:8080/lihuoming_23/3.png";//myeclpise建立的工程
try {
byte[] datas = ImageBussiess.downLoadImage(path);
final Bitmap bitmap = BitmapFactory.decodeByteArray(datas, 0,
datas.length);
runOnUiThread(new Runnable() {
@Override
public void run() {
iv_main_show.setImageBitmap(bitmap);//界面的显示必须在主线程中,runOnUiThread就是在线程中更新界面的显示
}
});
} catch (final IOException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "图片下载失败" + e.toString(),
Toast.LENGTH_LONG).show();
}
});
;
}
}
});
}
});
}
private void initView() {
btn_main_download = (Button) findViewById(R.id.btn_main_download);
iv_main_show = (ImageView) findViewById(R.id.iv_main_show);
}
}
黎活明8天快速掌握android视频教程--23_网络通信之网络图片查看器的更多相关文章
- 黎活明8天快速掌握android视频教程--25_网络通信之资讯客户端
1 该项目的主要功能是:后台通过xml或者json格式返回后台的视频资讯,然后Android客户端界面显示出来 首先后台新建立一个java web后台 采用mvc的框架 所以的servlet都放在se ...
- 黎活明8天快速掌握android视频教程--24_网络通信之网页源码查看器
1 该项目的主要功能就是从将后台的html网页在Android的界面上显示出来 后台就是建立一个java web工程在工程尚建立一个html或者jsp文件就可以了,这里主要看Android客户端的程序 ...
- 黎活明8天快速掌握android视频教程--27_网络通信之通过GET和POST方式提交参数给web应用
1该项目主要实现Android客户端以get的方式或者post的方式向java web服务器提交参数 Android客户端通过get方式或者post方式将参数提交给后台服务器,后台服务器对收到的参数进 ...
- 黎活明8天快速掌握android视频教程--22_访问通信录中的联系人和添加联系人
Android系统中联系人的通讯录的contentProvide是一个单独的apk,显示在界面的contact也是一个独立的apk,联系人apk通过contentProvide访问底层的数据库. 现在 ...
- 黎活明8天快速掌握android视频教程--21_监听ContentProvider中数据的变化
采用ContentProvider除了可以让其他应用访问当前的app的数据之外,还有可以实现当app的数据发送变化的时候,通知注册了数据变化通知的调用者 其他所有的代码都和第20讲的一样,不同的地方看 ...
- 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据
1.内容提供者是让当前的app的数据可以让其他应用访问,其他应该可以通过内容提供者访问当前app的数据库 contentProvider的主要目的是提供一个开发的接口,让其他的应该能够访问当前应用的数 ...
- 黎活明8天快速掌握android视频教程--19_采用ListView实现数据列表显示
1.首先整个程序也是采用mvc的框架 DbOpenHelper 类 package dB; import android.content.Context; import android.databas ...
- 黎活明8天快速掌握android视频教程--17_创建数据库与完成数据添删改查
1.我们首先来看下整个项目 项目也是采用mvc的框架 package dB; import android.content.Context; import android.database.sqlit ...
- 黎活明8天快速掌握android视频教程--16_采用SharedPreferences保存用户偏好设置参数
SharedPreferences保存的数据是xml格式,也是存在数据保存的下面四种权限: 我们来看看 我们来看看具体的业务操作类: /** * 文件名:SharedPrecences.java * ...
随机推荐
- [PHP学习教程 - 系统]004.通过ini_set()来设置系统属性(ini_set Method)
PHP原意:ini_set — 为一个系统配置项设置值 基本信息: string ini_set ( string $varname , string $newvalue). (说明:设置指定配置选项 ...
- [JavaWeb基础] 013.Struts2 自定义类型转换器
很多时候,我们在做web开发的时候经常要用到时间的转换器,Struts2给我们提供了一种类型转换器的接口.下面我们讲讲怎么实现吧. 1.首先我们要定义一个类型转换的类,继承自com.babybus.s ...
- 50个SQL语句(MySQL版) 问题三
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- keras常见问题
问题:AttributeError: 'CRF' object has no attribute '_outbound_nodes' 解答:这个一般情况下是keras版本的问题,将其改为keras== ...
- webpack+vue2.0项目 (一) vue-cli脚手架
很早以前就开始看vue2.0和webpack,但总是留不下深刻的印象,一直缺少一个可以贯通的项目,而且工作也没有时间,最近辞职在家,从网上找了个项目,写了大概八天,踩了无数的坑啊!! 下载的项目包括, ...
- Java实现 蓝桥杯 算法训练 Bit Compressor(暴力)
试题 算法训练 Bit Compressor 问题描述 数据压缩的目的是为了减少存储和交换数据时出现的冗余.这增加了有效数据的比重并提高了传输速率.有一种压缩二进制串的方法是这样的: 将连续的n个1替 ...
- Java实现 LeetCode 382 链表随机节点
382. 链表随机节点 给定一个单链表,随机选择链表的一个节点,并返回相应的节点值.保证每个节点被选的概率一样. 进阶: 如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现? ...
- java实现 洛谷 P1017 进制转换
import java.util.Scanner; public class Main { private static Scanner cin; public static void main(St ...
- Mysql索引扫盲总结
本文总结了一些MySQL索引的基本概念和原理,如果可以快速清晰回答这些问题可以出门左转提提宝贵建议. 什么是索引?索引为什么查询快,索引的数据结构是什么? 聚簇索引/非聚簇索引区别? 什么是覆盖索引? ...
- 数组 & 链表
数组 是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据. 使用了连续的内存空间和相同类型的数据,使得它可以“随机访问”,但同时也让数组的删除,插入等操作变得非常低效, 为了保 ...