当前位置:天才代写 > tutorial > 安卓教程 > Android开发网络图片查看器

Android开发网络图片查看器

2021-02-21 18:00 星期日 所属: 安卓教程 浏览:692

互联网图片查看器

  • 明确照片的网站地址

  • 推送http要求

    URL url = new URL(address);
    //获得联接目标,并沒有创建联接
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    //设定联接和载入请求超时
    conn.setConnectTimeout(5000);
    conn.setReadTimeout(5000);
    //设定要求方式,留意务必英文大写
    conn.setRequestMethod("GET");
    //创建联接,推送get请求
    //conn.connect();
    //创建联接,随后获得回应吗,200表明要求取得成功
    conn.getResponseCode();
  • 网络服务器的照片是以流的方式回到给电脑浏览器的

    //取得缺少对象的键入流
    InputStream is = conn.getInputStream();
    //把流里的数据信息载入出去,并结构成照片
    Bitmap bm = BitmapFactory.decodeStream(is);
  • 把照片设定为ImageView的表明內容

    ImageView iv = (ImageView) findViewById(R.id.iv);
    iv.setImageBitmap(bm);
  • 加上管理权限

    <uses-permission android:name="android.permission.INTERNET"/>

互联网要求

主线任务程堵塞

  • 主线任务程又被称为UI进程,由于仅有在主线任务程中才可以更新UI。假如必须在子进程中更新UI,应用消息队列体制

  • 在Android中,主线任务程被堵塞会造成UI终止更新,运用没法回应客户实际操作,客户体验将十分差

  • 一切用时实际操作也不应当在主线任务程开展,不然很有可能使主线任务程堵塞

  • 由于互联网互动归属于用时实际操作,假如网速很慢,编码会堵塞,因此 互联网互动的编码不可以写在主线任务程

  • 主线任务程堵塞時间太长,便会抛出去ANR(Application Not Responding,即运用无响应)出现异常

消息队列体制

  • 主线任务程建立时,系统软件会另外建立消息队列(MessageQueue)目标和信息轮询器(Looper)目标

  • 轮询器的功效便是不断的检验消息队列中是不是有信息(Message)

  • 消息队列一旦有信息,轮询器便会把信息目标发送给信息CPU(Handler)

  • CPU会启用handleMessage()方式来解决这条信息,handleMessage()方式运作在主线任务程中,因此 能够更新UI

    android.os.Handler handler = new android.os.Handler(){
        //主线任务程中有一个信息轮询器Looper,持续检验消息队列中是不是有最新动态,假如发觉有最新动态,全自动启用此方式,留意此方式是在主线任务程中运作的,因此 能够更新UI
        public void handleMessage(Message msg) {
    
        }
    };
  • 在子进程中往消息队列里发信息

    //建立信息目标
    Message msg = new Message();
    //信息的obj特性能够取值一切目标,这一特性使信息能够带上数据信息
    msg.obj = bm;
    //what特性等同于一个标识,用以区别出不一样的信息,进而运作不可以的编码
    msg.what = 1;
    //推送信息
    handler.sendMessage(msg);
  • 根据switch句子区别不一样的信息

    public void handleMessage(android.os.Message msg) {
        switch (msg.what) {
        //假如是1,表明归属于要求取得成功的信息
        case 1:
            ImageView iv = (ImageView) findViewById(R.id.iv);
            Bitmap bm = (Bitmap) msg.obj;
            iv.setImageBitmap(bm);
            break;
        case 2:
            Toast.makeText(MainActivity.this, "要求不成功", 0).show();
            break;
        }       
    }

小结:只需消息队列中有信息,handleMessage()方式便会启用。子进程假如必须更新UI,只必须应用CPU目标的sendMessage()方式憧憬消息队列中发一条信息,开启handleMessage()方式就可以

添加缓存文件照片的作用

  • 把缺少对象的流里的数据信息载入出去,随后根据文档键入流写至本地文件

    //1.取得缺少对象的键入流
    InputStream is = conn.getInputStream();
    //2.把流里的数据信息载入出去,并结构成照片
    FileOutputStream fos = new FileOutputStream(file);
    byte[] b = new byte[1024];
    int len = 0;
    while((len = is.read(b)) != -1){
        fos.write(b, 0, len);
    }
  • 建立bitmap目标的编码改为

    Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath());
  • 每一次推送要求前检验一下在缓存文件中是不是存有同名的照片,假如存有,则载入缓存文件


获得开放源码的网址

  • code.google.com

  • github.com

  • 在github检索smart-image-view

  • 免费下载开源项目smart-image-view

  • 应用自定部件时,标识姓名要写包名

    <com.loopj.android.image.SmartImageView/>
  • SmartImageView的应用

    SmartImageView siv = (SmartImageView) findViewById(R.id.siv);
    siv.setImageUrl("http://192.168.1.102:8080/dd.jpg");

Html源文件查看器

  • 推送GET要求

    URL url = new URL(path);
    //获得联接目标
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    //设定联接特性
    conn.setRequestMethod("GET");
    conn.setConnectTimeout(5000);
    conn.setReadTimeout(5000);
    //创建联接,获得回应吗
    if(conn.getResponseCode() == 200){
    
    }
  • 获得缺少对象的流,从流中把html源代码载入出去

    byte[] b = new byte[1024];
    int len = 0;
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    while((len = is.read(b)) != -1){
        //把看到的字节数先载入字节二维数组輸出流中存起來
        bos.write(b, 0, len);
    }
    //把字节数二维数组輸出流中的內容转化成字符串数组
    //默认设置使用utf-8
    text = new String(bos.toByteArray());

错码的解决

  • 错码的出現是由于服务端和手机客户端时速表不一致造成

    //手动式特定时速表
    text = new String(bos.toByteArray(), "gb2312");

递交数据信息

GET方法递交数据信息

  • get方法递交的数据信息是立即拼凑在url的结尾

    final String path = "http://192.168.1.104/Web/servlet/CheckLogin?name="   name   "&pass="   pass;
  • 推送get请求,编码和以前一样

    URL url = new URL(path);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    conn.setReadTimeout(5000);
    conn.setConnectTimeout(5000);
    if(conn.getResponseCode() == 200){
    
    }
  • 电脑浏览器在推送要求带上数据信息的时候会对数据信息开展URL编码,大家敲代码时也必须为汉语开展URL编码

    String path = "http://192.168.1.104/Web/servlet/CheckLogin?name="   URLEncoder.encode(name)   "&pass="   pass;

POST方法递交数据信息

  • post递交数据信息是用流写給网络服务器的

  • 协议书头中多了2个特性

    • Content-Type: application/x-www-form-urlencoded,叙述递交的数据信息的mimetype

    • Content-Length: 32,叙述递交的数据信息的长短

      //给请求头加上post多出去的2个特性
      String data = "name="   URLEncoder.encode(name)   "&pass="   pass;
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestProperty("Content-Length", data.length()   "");
  • 设定容许开启post要求的流

    conn.setDoOutput(true);
  • 获得联接目标的輸出流,往流里写要递交给网络服务器的数据信息

    OutputStream os = conn.getOutputStream();
    os.write(data.getBytes());
 

    关键字:

天才代写-代写联系方式